休息URL中名词与动词之间的混淆

时间:2014-11-25 08:23:18

标签: rest restful-url

我已经在互联网上研究了宁静的API,它专注于名词而不是动词模式中的动词,但现在我看到多个链接在URL中使用动词。

这是一个例子。

  
      
  • POST / v1 / payments / authorization /< Authorization-Id> / capture
  •   
  • POST / v1 / payments / authorization /< Authorization-Id> / void
  •   
  • POST / v1 / payments / authorization /< Authorization-Id> / reauthorize
  •   
这是Paypal apis。 PayPal API

也在维基百科的HTATEOAS页面上他们举了一个例子;

<?xml version="1.0"?>
<account>
   <account_number>12345</account_number>
   <balance currency="usd">100.00</balance>
   <link rel="deposit" href="/account/12345/deposit" />
   <link rel="withdraw" href="/account/12345/withdraw" /> 
   <link rel="transfer" href="/account/12345/transfer" />
   <link rel="close" href="/account/12345/close" />
 </account>

link:Wiki HATEOAS

任何人都可以帮我澄清一下吗?为什么&#39;捕获&#39;,&#39;无效&#39;,&#39;存款&#39;,&#39;撤回&#39;,&#39;关闭&#39;在URI中因为它们都是动词而不是名词吗?

或者可以在rest-full apis url中使用这些单词吗?

2 个答案:

答案 0 :(得分:18)

REST API Design Rulebook中有关不同资源类型的一些摘录:

  

<强>文档

     

文档资源是一种类似于对象实例或数据库的单一概念   记录。

     

实施例:       http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet

     

<强>集合

     

集合资源是服务器管理的资源目录。客户可以提议   要添加到集合的新资源。但是,它可以由集合来选择   是否创建新资源。

     

示例:http://api.soccer.restapi.org/leagues/seattle/teams

     

商品

     

商店是客户端管理的资源库。商店资源允许API客户端放置   资源,让他们退出,并决定何时删除它们。在他们自己的商店   不要创造新的资源;因此,商店永远不会生成新的URI。相反,每一个   存储的资源具有客户端在最初放入时所选择的URI   存储。

     

示例:PUT /users/1234/favorites/alonso

     

<强>控制器

     

控制器资源模拟程序概念。控制器资源就像可执行函数,带有参数和返回值;输入和输出。

     

与传统Web应用程序使用HTML表单一样,REST API依赖于控制器   用于执行无法逻辑映射到的特定于应用程序的操作的资源   标准方法之一(创建,检索,更新和删除,也称为   CRUD)。

     

控制器名称通常显示为URI路径中的最后一个段,没有子项   在层次结构中跟随它们的资源。

     

示例:POST /alerts/245743/resend

根据本书中的定义,您发布的URI可能属于控制器资源类型,本书稍后会说明:

  

规则:动词或动词短语应用于控制器名称

     

示例:

     
      
  • http://api.college.restapi.org/students/morgan/register
  •   
  • http://api.example.restapi.org/lists/4324/dedupe
  •   
  • http://api.ognom.restapi.org/dbs/reindex
  •   
  • http://api.build.restapi.org/qa/nightly/runTestSuite
  •   

其他命名规则,仅为完整性

  
      
  • 规则:单数名词应用于文档名称
  •   
  • 规则:复合名词应用于集合名称
  •   
  • 规则:商店名称应使用复数名词
  •   

答案 1 :(得分:7)

在REST中,动词是HTTP方法。在您的示例中,它是POST,但它也可以是GETPUTDELETE

名词是由URL标识的资源。在你的例子中,&#34;名词&#34;是/v1/payments/authorization/<Authorization-Id>/capture等等。

正如您所看到的,这不是真正的名词,因为capture是一个动词:捕获付款授权。这不是RESTful,因为它是一个命令,一个动词,而不是一个东西,一个名词。

更好的方法是将这些命令建模为/v1/payments/authorization/<Authorization-Id>/capturecommand之类的东西。这个命令将是一个名词。它可能具有状态,例如,如果它成功,结果是什么等等。

有很多代码声称是RESTful而且不是。