POST / PUT restful服务的URI模板

时间:2012-06-14 13:05:55

标签: wcf api c#-4.0 rest

我打算编写一个安静的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的这些方法。感谢

3 个答案:

答案 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://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

答案 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/