我正在写一个符合https://jsonapi.org/format/标准的api规范。我无法确定在下面的场景中实现的正确uri格式。
概述:
公司库存系统包含产品和价格信息。一种产品有很多价格。库存系统通过API将数据推送到本地系统,但使用库存系统主键。本地系统应将提供的数据捕获到API中,并在本地数据库中更新或创建价格记录
例如:
POST / products / ..... ??或POST /产品/
{
"data":{
"externalId":"EIR-32432",
"externalPriceId":xxx,
"price":"xxx.xx",
"currency":"USD"
}
}
您必须向URL发送POST
请求,该URL表示用于在JSON:API规范中创建资源的资源集合:
可以通过向表示资源集合的URL发送POST请求来创建资源。请求必须包含单个资源对象作为主数据。资源对象必须至少包含一个类型成员。
规范本身与URL命名无关,但在所有示例中都使用复数资源类型。如果您遵循相同的约定,创建产品的请求应该是POST /products
。
如上所述,请求必须包含resource object。您的问题中的示例不是有效的资源对象,因为它错过了type
并且属性不在attributes
密钥下。创建产品的有效资源对象如下所示:
{
"data":{
"type": "products",
"attributes": {
"externalId": "EIR-32432",
"externalPriceId": "xxx",
"price": "xxx.xx",
"currency": "USD"
}
}
}
另请注意,关系不应显示为属性:
尽管有一个外键(例如author_id)通常与其他信息一起存储在内部,以便在资源对象中表示,但这些键不应作为属性出现。
从您的示例中可以清楚地了解externalId
和externalPriceId
是否是API范围内的关系。
请在规范本身中找到有关在JSON:API中创建资源的更多详细信息:https://jsonapi.org/format/#crud-creating它还附带了一个示例。
你可以在这里检查URI的一些命名:https://restfulapi.net/resource-naming/