REST Api命名约定?

时间:2018-09-18 10:57:13

标签: rest api

我有一个简单的问题,找不到答案。

我的同事当前正在为应用程序制作REST Api,我们有一个电话可以简单地检查一些信息,并返回true或false。但是,我们不知道如何调用这种类型的请求,因为它不检索任何资源或插入任何内容,它只是检查传递给查询的某些信息。据我了解,GET必须检索该调用没有执行的资源

4 个答案:

答案 0 :(得分:2)

我了解的是,这种情况下的资源是对还是错。调用API时,根据API服务器处理的信息,您期望响应为真或为假(状态始终为200)。因此,GET方法仍然适用于这种情况。 如果您对响应正文不感兴趣,并且想要诸如响应代码和标头详细信息之类的数据,请使用HEAD。

答案 1 :(得分:1)

很难通过您提供问题的详细程度来区分。但是,如果需要检查资源是否存在,可以使用HEAD。与GET相同,但是它不会在响应有效负载中返回任何表示形式:它仅返回状态代码和响应标头。

考虑以下请求HEAD的请求:

HEAD /postal-codes/10001 HTTP/1.1
Host: example.org
Content-Type: application/json

对于存在的资源,它应该返回200

HTTP/1.1 200 OK
Content-Type: application/json

还有404用于不存在的资源:

HTTP/1.1 404 Not Found
Content-Type: application/json

根据您的需要,您可以使用POST来解决它,这可以看作是 catch all 动词。

例如,考虑以下请求和响应:

POST /postal-codes/validation HTTP/1.1
Host: example.org
Content-Type: application/json

{ "postal-code": "10001" }
HTTP/1.1 200 OK
Content-Type: application/json

{ "postal-code": "10001", "status": "valid" }
HTTP/1.1 200 OK
Content-Type: application/json

{ "postal-code": "10001", "status": "invalid" }

答案 2 :(得分:1)

表达“检查某些信息”的方式可能有所不同,重要的是要具体说明其含义。

因此,让我们举一个任意的例子。您正在为博客文章建模,并想知道是否将某些博客文章设置为“草稿”。

“草稿”状态可以是其自身的资源,例如:

/posts/hello-world/is-draft

GET资源上进行is-draft请求可以产生:

{
   "is-draft": true
}

因此,要将任意事物建模为资源,最好的思考方法是将操作结果视为“表示形式”,并将“您想知道的事情”视为URI。

答案 3 :(得分:1)

  

据我所知,GET必须检索该调用没有执行的资源

从技术上讲,它是在获取资源;参见Fielding

  

REST中信息的关键抽象是一种资源。可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶今天的天气”),其他资源的集合,非虚拟对象(例如人)等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。

在这种情况下,资源可能不会在您的数据模型中加载实体,但这没关系。并非所有资源都必须。

从技术上讲,我认为您拥有的是“功能”;您需要计算结果的所有信息都存在于URI本身中吗?这意味着,如果客户知道如何进行计算(并拥有可用的计算资源),则客户将能够自行完成工作。

但是拥有“函数的结果”资源并没有错。

在某些API中,您将看到谓词(返回true / false的函数)实现为仅在评估为true时才存在(更确切地说,仅具有“表示形式”)的资源。

GET /predicate?true

204 No Content

GET /predicate?false

404 Not Found

您不需要考虑资源的“状态”来计算对查询的正确响应这一事实是隐藏在统一界面后面的实施细节