哪一个的这些Uri将更多'适合',用于接收员额(增加产品(s))?是否有任何最佳做法可用,或只是个人喜好?

产品/ (单)

/products/ (复数)

目前,我们使用 /products/?query=blah 用于搜索和 /product/{productId}/ 为获取放&删除的一个单一的产品。

有帮助吗?

解决方案

由于POST是一个“追加”操作,它的可能的更Englishy张贴到/products,因为你会被追加一个新的产品,现有产品的列表。

只要你已经标准化了您的API中的一些东西,我觉得这是够好。

由于REST API的应该是超文本驱动,所述URI是相对不重要的反正。客户应该从返回的文档拉URI和使用那些在随后的请求;典型的应用程序,人们不会需要去猜测或直观地解释的URI,因为应用程序将被明确指示客户什么样的资源和URI是可用的。

其他提示

通常使用POST创建资源,当你不知道资源的提前识别和PUT当你这样做。所以,你会发布到/产品,或投入/产品/ {新-ID}。

使用这两种你会回到201创建,并与另外POST返回包含新创建的资源的URL一个Location头(假设它被成功地创建的)。

您POST或GET一个单一的东西:一个单一的产品

有时你没有具体的产品GET(或与查询条件)。但是你还是要说它是单数。

您很少工作的名字复数形式。如果你有一个集合(的产品目录),它是一个目录。

在RESTful的设计中,有围绕创建新资源几个模式。您选择很大程度上模式取决于谁是负责选择的URL新创建的资源。

如果客户是负责选择URL,那么客户端应该把到的URL资源。相反,如果服务器是负责的URL资源,那么客户应该张贴到“工厂”的资源。典型地,工厂资源是所创建的资源的父资源,通常是其处于多元集合。

所以,你的情况我会建议使用/products

我只发布到单数/product。这只是太容易混淆两个URL-S和感到困惑或犯错。

如许多人说,你也许可以选择任何你喜欢的风格,只要你是一致的,然而我想指出的一些论点在双方;我个人偏向单

在有利于多资源的名字:

  • 简单的URL方案如你所知的资源名总是在复数
  • 许多人认为这个《公约》的类似数据库如何表决和考虑这一优势
  • 似乎是更广泛地通过了

有利于资源名单(这并不排除复数形式的工作时,对多个资源)

  • URL方案更复杂的,但你获得更多的表现力
  • 你总是知道什么时候你正在处理一个或更多的资源,根据资源的姓名、而不是检查资源是否有一个id寻找路径参数下
  • 复数的是有时很难为非母语(当不仅仅是一个"s")
  • URL长
  • "s"似乎是多余的,从一个程序员的角度来看
  • 只是尴尬的要考虑的路径参数作为分资源的收集而不是考虑它是什么:只是一个ID的资源,它确定了

您可以使用所有这些相同的URL,并使用MessageContext来确定Web服务的调用者想要执行什么类型的动作。 没有指定语言,但在Java中,你可以做这样的事情。

WebServiceContext ws_ctx;
MessageContext ctx = ws_ctx.getMessageContext();
String action = (String)ctx.get(MessageContext.HTTP_REQUEST_METHOD);
if(action.equals("GET")
  // do something
else if(action.equals("POST")
  // do something

这样,你可以检查被发送到web服务请求的类型,并执行基于该请求的方法的适当的行动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top