如果您想将商品添加到购物车,有 2 个选项。
1. 购物车是 REST 客户端状态的一部分,因此您不要将该信息存储在 REST 服务中。在这种情况下,您可以将项目和金额存储在客户端、cookie 或服务器端 REST 客户端中,这并不重要。您应该存储项目的 url、项目的 id 和数量,也许还有价格......所有这些都来自 REST 服务......
2.购物车存储在REST服务中,所以它是一种资源,任何改变都会影响服务的资源状态。在这种情况下,您可以创建一个带有POST /carts
请求的购物车,之后您将获得一个唯一的购物车 ID:
201
{
id: 123,
_links: {
self: {href: "/carts/123"}
}
}
您的客户必须记住这一点,因此,如果您通过目录获得链接模板,例如/items?search=@keywords&cart=@cart.id
,您可以在其上填写购物车 ID...
通过浏览目录,您可以通过以下方式获取项目:GET /items?search="red pullover"&cart=123
。之后,您将获得add-cart
任何项目的链接:
{
id: 567,
name: "red pullover",
_links: {
"add-cart": {
href: "/cart-items",
fields: {
cart: {type: "hidden", value: 123},
item: {type: "hidden", value: 567},
amount: {type: "select", value: 1, min: 1, max: 10}
}
}
}
}
session.cart.id
如果客户端中存在该链接,您可以从该链接创建一个表单和一个按钮。如果没有,那么您可以忽略该链接。如果您在生成的表单中按下按钮,它将向服务发送如下内容:
POST /cart-items
{
cart: 123,
item: 567,
amount: 1
}
201
{
id: 22222,
_links: {
self: {href: "/cart-items/22222"}
}
}
因此,如果您希望您的服务保持 RESTful,您的客户端绝不能生成链接。它总是从服务中获取链接。该服务从不存储客户端状态,客户端状态始终以 queryString 或 postData ...
您可以将 HTML 格式的响应发送到您的 REST 客户端,REST 客户端决定如何处理响应以及如何显示它。最好以数据格式发送响应,例如 HAL+JSON 或 JSON-LD 或 ATOM+XML,因为它们已经存在序列化器和反序列化器。HTML 没有序列化器/反序列化器,只有一个慢速解析器,所以如果你使用 HTML,你必须自己编写那部分代码。
您可以使用 HAL+JSON 找到您自己的表单表示,或者您可以使用现有的模式。JSON-LD 和 ATOM+XML 和 HAL+HTML 可以绑定到现有的 RDF 模式,或者可能绑定到微格式,所以也许有一个关于如何描述表单的模式。您可以浏览已经存在的模式,例如在schema.org上,或者您可以在这里找到已经存在的链接关系:link-relations。几乎所有事情都有许多其他解决方案,不仅仅是关于显示表单,还有关于表示数据。您可以通过关键字找到更多信息:链接数据、链接开放数据等...