我已经在互联网上研究了宁静的API,它专注于名词而不是动词模式中的动词,但现在我看到多个链接在URL中使用动词。
这是一个例子。
这是Paypal apis。 PayPal API
- POST / v1 / payments / authorization /< Authorization-Id> / capture
- POST / v1 / payments / authorization /< Authorization-Id> / void
- POST / v1 / payments / authorization /< Authorization-Id> / reauthorize
也在维基百科的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中使用这些单词吗?
答案 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
,但它也可以是GET
,PUT
或DELETE
。
名词是由URL标识的资源。在你的例子中,&#34;名词&#34;是/v1/payments/authorization/<Authorization-Id>/capture
等等。
正如您所看到的,这不是真正的名词,因为capture
是一个动词:捕获付款授权。这不是RESTful,因为它是一个命令,一个动词,而不是一个东西,一个名词。
更好的方法是将这些命令建模为/v1/payments/authorization/<Authorization-Id>/capturecommand
之类的东西。这个命令将是一个名词。它可能具有状态,例如,如果它成功,结果是什么等等。
有很多代码声称是RESTful而且不是。