2012-06-14 37 views
8

Tôi sẽ viết một API an toàn, yêu cầu của tôi là gọi các phương thức trên đối tượng "Giao dịch", tôi đã tự hỏi làm thế nào tôi nên gọi Post/PUT với mẫu URI thích hợp để tôi có thể Tạo/cập nhật tài nguyên Giao dịch mà không sử dụng "động từ" trong ánh xạ Uri.Mẫu URI cho POST/PUT dịch vụ an toàn

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction AddTransaction(Transaction transaction) 
{ 
    return AddTransactionToRepository(transaction); 
} 

[OperationContract] 
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(Transaction transaction) 
{ 
    return UpdateTransactionInRepository(transaction); 
} 

Hãy xem xét rằng tôi muốn áp dụng phương pháp hay nhất để lập bản đồ uri và không muốn "động từ" trong đó, chỉ "danh từ". Cũng cho tôi biết cách khách hàng sẽ truy cập các phương thức này cho Đăng và Đặt bằng URI duy nhất. Cảm ơn

Trả lời

13

Bạn phải ánh xạ URI như sau cho Transaction.

Nhận một giao dịch bằng ID - GET - giao dịch/id

Tạo một giao dịch mới - POST - giao dịch

Cập nhật một giao dịch - PUT - giao dịch/id

Xóa một giao dịch - DELETE - giao dịch/id

mẫu URI của bạn đã được thay đổi như sau

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/Transaction", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction AddTransaction(Transaction transaction) 
{ 
    // 
} 

[OperationContract] 
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(int id, Transaction transaction) 
{ 
    // 
} 

thế nào khách hàng sẽ truy cập vào các phương pháp này cho Bưu Đặt độc đáo URI

Bạn không cần URI duy nhất cho POST và PUT. Có URI có thể giống nhau.

Tài liệu tham khảo: http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations

http://msdn.microsoft.com/en-us/library/bb412172(v=vs.90).aspx

+0

Cảm ơn Mark đã làm rõ, tôi đã nhầm lẫn về cách khách hàng sẽ giao tiếp theo cách dễ đọc hơn, nhưng tôi đoán khách hàng phải gọi cùng một url nhưng chỉ định các hành động khác nhau, đặt, xóa trong khi gọi phương thức Api. – MSUH

+0

@MSUH Chính xác là – VJAI

+0

@Mark, Tại sao cả hai phương thức này trả về một đối tượng Giao dịch? Tôi hiểu rằng phương thức POST có thể cần điều này vì Id có thể là số được tạo tự động trên cơ sở dữ liệu, nhưng tại sao phương pháp PUT? Cảm ơn. – RobJohnson

2

PUT là để tạo hoặc cập nhật một nguồn tài nguyên được biết đến, ví dụ: PUT/giao dịch/1234

Điều này sẽ tạo ra (hoặc cập nhật nếu nó đã tồn tại) giao dịch với ID 1234. Điều này có nghĩa bạn chỉ có thể sử dụng PUT khi bạn biết URL của tài nguyên.

ĐĂNG tạo tài nguyên con mới, ví dụ: POST/Giao dịch/

Điều này sẽ tạo tài nguyên giao dịch mới.

Lưu ý rằng tôi đã giao dịch nhiều lần để nó bây giờ đại diện cho một bộ sưu tập.

Không phải là nhà phát triển C#, tôi không biết bản đồ này dễ dàng như thế nào đối với WCF, nhưng cách tiếp cận này không phụ thuộc vào công nghệ.

Các vấn đề liên quan