REST API:POSTing 客户端应该如何了解关联的 ID?
REST API: how should a POSTing client learn about associated ids?
我正在更新 RESTful API,它已经在使用 JSON API。
我想启用 /quotes
的 POST,但引号必须有 product
。
我的问题是:客户应该如何了解和识别应该与报价相关联的产品?
这里有一些想法;我欢迎其他人。
- 要求客户端先GET
/products
,在返回的列表中找到想要的商品,然后发送问题商品的id
。
- 标准化一些永远不会改变的 public 代码列表,这样客户就可以简单地相信代码是可靠的。例如。如果产品是 Acme 的产品 1,代码可以是
"acme_1"
,等等
至于选项 2,代码可以作为 attribute
或 relationship
发送。也就是说,我们可以做
// option 2a
"data": {
"type": "accounts",
"attributes": {
"foo": "bar",
"product_code": "acme_1"
}
}
// option 2b
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"type": "products",
"id": "acme_1"
}
}
请发送想法、建议、and/or阅读建议!
如果您在 quote
和 product
之间存在一对多关系,这应该反映在您的负载中。关系必须在 relationships
key of a resource object. A resource linkage
中,必须在 relationships object
的 data
键下。因此,您提供的两个选项 2a 和 2b 都不符合规范。创建具有关系的资源的有效负载如下所示:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": {
"type": "products",
"id": "acme_1"
}
}
}
}
}
请注意,该示例显示了一对一关系的关系对象。如果一个 帐户 可以有多个 产品 data
属性
关系对象必须是一个数组:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": [
{
"type": "products",
"id": "acme_1"
},
{
"type": "products",
"id": "acme_2"
},
]
}
}
}
}
从 JSON API 规范的角度来看,客户端如何知道要关联哪个 ID 并不重要。 spec only states 一个 id
必须是一个字符串并且 type
和 id
的组合 "must identify a single, unique resource".
当然客户端必须知道哪个资源应该与创建的资源相关联。如何实现它完全取决于应用程序。它可以被硬编码或从后端获取。出于可扩展性和可维护性的原因,如果它有可能定期更改,我建议不要对其进行硬编码。但是从 JSON API 规范的角度来看,它只在引用的相关资源存在时才重要。否则服务器 must return a 404 Not Found
.
我正在更新 RESTful API,它已经在使用 JSON API。
我想启用 /quotes
的 POST,但引号必须有 product
。
我的问题是:客户应该如何了解和识别应该与报价相关联的产品?
这里有一些想法;我欢迎其他人。
- 要求客户端先GET
/products
,在返回的列表中找到想要的商品,然后发送问题商品的id
。 - 标准化一些永远不会改变的 public 代码列表,这样客户就可以简单地相信代码是可靠的。例如。如果产品是 Acme 的产品 1,代码可以是
"acme_1"
,等等
至于选项 2,代码可以作为 attribute
或 relationship
发送。也就是说,我们可以做
// option 2a
"data": {
"type": "accounts",
"attributes": {
"foo": "bar",
"product_code": "acme_1"
}
}
// option 2b
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"type": "products",
"id": "acme_1"
}
}
请发送想法、建议、and/or阅读建议!
如果您在 quote
和 product
之间存在一对多关系,这应该反映在您的负载中。关系必须在 relationships
key of a resource object. A resource linkage
中,必须在 relationships object
的 data
键下。因此,您提供的两个选项 2a 和 2b 都不符合规范。创建具有关系的资源的有效负载如下所示:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": {
"type": "products",
"id": "acme_1"
}
}
}
}
}
请注意,该示例显示了一对一关系的关系对象。如果一个 帐户 可以有多个 产品 data
属性
关系对象必须是一个数组:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": [
{
"type": "products",
"id": "acme_1"
},
{
"type": "products",
"id": "acme_2"
},
]
}
}
}
}
从 JSON API 规范的角度来看,客户端如何知道要关联哪个 ID 并不重要。 spec only states 一个 id
必须是一个字符串并且 type
和 id
的组合 "must identify a single, unique resource".
当然客户端必须知道哪个资源应该与创建的资源相关联。如何实现它完全取决于应用程序。它可以被硬编码或从后端获取。出于可扩展性和可维护性的原因,如果它有可能定期更改,我建议不要对其进行硬编码。但是从 JSON API 规范的角度来看,它只在引用的相关资源存在时才重要。否则服务器 must return a 404 Not Found
.