我打算编写一个安静的API,我的要求是在“Transaction”对象上调用方法,我想知道如何使用适当的URI模板调用Post / PUT,这样我就可以创建/更新Transaction资源而不使用Uri制图中的“动词”。
[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);
}
请考虑我想为uri映射应用最佳实践,并且不要在其中使用“动词”,只需要“名词”。还告诉我客户端如何使用唯一URI访问Post和Put的这些方法。感谢
答案 0 :(得分:15)
您必须为Transaction
映射下面的URI。
按ID 获取交易 - GET - transaction / id
创建新交易 - POST - 交易
更新交易 - PUT - 交易/ ID
删除交易 - 删除 - 交易/ ID
您的URI模板必须更改如下
[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)
{
//
}
客户端如何使用唯一URI访问Post和Put的这些方法
您不需要POST和PUT的唯一URI。 URI可以是相同的。
http://msdn.microsoft.com/en-us/library/bb412172(v=vs.90).aspx
答案 1 :(得分:2)
PUT用于创建或更新已知资源,例如:PUT / Transactions / 1234
这将创建(或更新,如果它已存在)具有ID 1234的事务。这意味着只有在知道资源的URL时才能使用PUT。
POST会创建一个新的子资源,例如:POST / Transactions /
这将创建一个新的交易资源。
注意我复数化了Transaction,所以它现在代表一个集合。
不是C#开发人员,我不知道它映射到WCF有多容易,但这种方法与技术无关。
答案 2 :(得分:-1)
为了制作合适的网址和api设计原则......我发现这本电子书(不是我的!)必读: http://offers.apigee.com/api-design-ebook-rr/