Tôi vẫn đang học về REST và, trong bài kiểm tra của tôi, đã đưa ra kịch bản này mà tôi không biết cách giải quyết.Làm cách nào để thêm dữ liệu mới thông qua dịch vụ REST phản đối dịch vụ kiểu RPC?
Tôi có dịch vụ WCF mẫu hiện có sử dụng LINQ-to-Sql. Một cơ sở dữ liệu cực kỳ đơn giản với một bảng duy nhất có tên là "Nhiệm vụ" có bốn trường: Id, Mô tả, IsCompleted và EnteredDate. (Tôi đã đề cập điều này vì tôi không có hợp đồng dữ liệu được xác định trong bản thân dịch vụ, tất cả đều xuất phát từ bối cảnh được tạo bởi LINQ.)
Thu thập dữ liệu không đáng kể để chuyển sang REST ... Tuy nhiên, việc chèn các bản ghi mới không có vẻ dễ dàng.
RPC-Phong cách của tôi hoạt động hợp đồng trông như thế này:
[OperationContract]
void AddTask(string description);
Id, IsCompleted, và EnteredDate không cần thiết như việc thực hiện dịch vụ trông như thế này:
public void AddTask(string description)
{
TaskListLinqDataContext db = new TaskListLinqDataContext();
Task task = new Task()
{ Description = description, IsCompleted = false,
EntryDate = DateTime.Now };
db.Tasks.InsertOnSubmit(task);
db.SubmitChanges();
}
Id là một Danh tính và do đó được xử lý bởi cơ sở dữ liệu.
Suy nghĩ đầu tiên của tôi là để trang trí hợp đồng hoạt động như thế này:
[WebInvoke(Method="PUT", UriTemplate="tasks/{description}")]
[OperationContract]
void AddTask(string description);
Nhưng tôi thực sự không biết làm thế nào để có được điều này để làm việc. Khi tôi thử sử dụng Fiddler để thêm nó, nó trả về kết quả là 411 (Độ dài bắt buộc).
Cách thích hợp để thực hiện việc này là gì? Tôi có phải viết lại quá trình triển khai để chấp nhận toàn bộ tài liệu XML đại diện cho bản ghi mới không?
@thaggie: liên kết đính kèm cho tôi biết rằng UriTemplate và hoạt động của tôi có thể hợp lệ, nhưng không giúp tôi giải quyết được vấn đề của mình. Tôi không biết cách đưa dữ liệu vào dịch vụ đúng cách. Ví dụ, loại Trình xây dựng yêu cầu nào sẽ Fiddler sử dụng để lấy dữ liệu vào dịch vụ? –