Rest 我应该在回复中返回与项目相关的URL吗

Rest 我应该在回复中返回与项目相关的URL吗,rest,api,Rest,Api,在我的API中,我应该返回一个产品列表。在客户端(浏览器)中,用户可以将此产品添加到购物车,增加、减少或从购物车中删除此产品 在我对产品列表的回复中,我是否应该将URL操作如下: { "alias": 'aliasValue', "removeUrl": 'domain/product/alias/', "increaseUrl": 'domain/product/alias/increase/', "decreaseUrl": 'domain/product/alias

在我的API中,我应该返回一个产品列表。在客户端(浏览器)中,用户可以将此产品添加到购物车,增加、减少或从购物车中删除此产品

在我对产品列表的回复中,我是否应该将URL操作如下:

{
   "alias": 'aliasValue',
   "removeUrl": 'domain/product/alias/',
   "increaseUrl": 'domain/product/alias/increase/',
   "decreaseUrl": 'domain/product/alias/decrease/',
   ...
}
这是一个好的实践吗?我已经搜索过了,但是我发现关于URL和API的唯一内容是关于URL结构的


你觉得怎么样?

我建议不要重新发明轮子。在您的API中有许多可供使用的方法

例如,考虑一种方法,其中您有一个
\u links
属性:

{
“_链接”:{
“自我”:{
“href”:”http://example.com/api/books/1"
}
},
“id”:“1”,
“名称”:“超媒体作为一等公民”
}

我建议不要重新发明轮子。在您的API中有许多可供使用的方法

例如,考虑一种方法,其中您有一个
\u links
属性:

{
“_链接”:{
“自我”:{
“href”:”http://example.com/api/books/1"
}
},
“id”:“1”,
“名称”:“超媒体作为一等公民”
}

您试图实现的名称HATEOAS,代表作为应用程序状态引擎的超媒体

因此,如果您搜索它,您将发现许多格式:

  • JSON-LD
  • 哈尔
  • 警报器
  • 离子
  • JSON API
  • 弹簧
  • 里波佐

来源:

您试图实现的名称HATEOAS,代表作为应用程序状态引擎的超媒体

因此,如果您搜索它,您将发现许多格式:

  • JSON-LD
  • 哈尔
  • 警报器
  • 离子
  • JSON API
  • 弹簧
  • 里波佐

来源:

由于REST只是我们都知道的可浏览Web的一种生成,您基本上可以应用相同的概念,就像您要为浏览器实现系统一样。简言之,服务器应该向客户机提供客户机做出下一步调用哪些资源的明智决策所需的所有必要信息

在基于浏览器的Web应用程序中,交互模型可能类似于调用起始页,如果看到响应中您感兴趣的部分,请单击链接以了解更多详细信息。下一页可能会列出一些项目,其中提供了修改此列表的进一步控件,即添加新项目、删除项目等等。单击某个“添加”按钮后,将向您显示一个表单,该表单将告诉您请求应包含哪些字段,以及该请求应发送到何处,即使您可能看不到该表单。在后面,浏览器将为您处理这些问题。这里的出发点是,服务器实际上是在向客户机提供完成任务所需的任何信息,无论是选择要浏览的可用链接,还是提供有关请求外观的一些指导原则

为了确定客户机是否对链接感兴趣,服务器将使用“附加”到URI的有意义的链接关系名称,客户机应该使用这些名称,而不是解析和解释URI。这允许服务器在不影响客户端的情况下随时更改URI。菲尔丁在他的一篇博客文章中提到了以下内容:

REST API应该将其几乎所有的描述性工作用于定义用于表示资源和驱动应用程序状态的媒体类型,或者为现有标准媒体类型定义扩展关系名称和/或支持超文本的标记。()

此外,restapi对客户机没有意义,因为这基本上将客户机与API本身紧密耦合,如果服务更改了返回的响应,就会导致失败。相反,应该使用内容类型协商,以便让客户端和服务器就实际使用的表示格式进行协商

媒体类型定义了为特定
内容类型
HTTP头接收的某些有效负载的处理规则。这些规则定义了文档的语法和语义。REST体系结构中的服务器允许拒绝针对特定内容类型发送的任何消息,前提是媒体类型中概述的规则不适用

虽然对媒体类型的关注并不能阻止对完全接收的表示进行更改,但它仍然有助于进一步将客户端与服务器分离,并减少与服务交互所需的带外信息。与直接将客户机耦合到API不同,两者实际上都耦合到媒体类型,并且它们实际上可能耦合到多个媒体类型。如果需要对媒体类型进行更改,您可以轻松引入新的媒体类型,或者类似于HTML,在媒体类型中指定如何实现向后兼容性

关于先前的带外信息要求,Fielding表示,REST并没有完全删除这些要求

当然,客户事先知道。每个协议、每个媒体类型定义、每个URI方案和每个链接关系类型都构成了客户机必须知道(或学习)的先验知识,以便使用这些知识。休息并不能消除对线索的需要。REST所做的是将对先验知识的需求集中到易于标准化的形式中。这是面向数据和面向控制的集成之间的本质区别。()

由于REST不是一个单一方面的焦点,而是上述所有方面的集合,所以您的实际问题应该从多个角度来解决

首先,要么使用现有的链接关系,即由或其他管理的链接关系,定义新的链接关系,最好向IANA注册,要么使用一些语义web相关的标记,如。即,如果您有集合,则
next
prev
fir