【问题标题】:JSON API - How to form URI segments when fetching data from external sourceJSON API - 如何在从外部源获取数据时形成 URI 段
【发布时间】:2019-03-27 21:00:54
【问题描述】:

我正在编写符合https://jsonapi.org/format/ 标准的api 规范。我无法确定要在以下场景中实施的正确 uri 格式。

概览:

公司库存系统包含产品和价格信息。一种产品有多种价格。库存系统通过 API 将数据推送到本地系统,但使用库存系统主键。本地系统应将提供的数据捕获到 API 中,并在本地数据库中更新或创建价格记录

例如:

POST /products/..... ??或发布 /products/

{
   "data":{
       "externalId":"EIR-32432",
       "externalPriceId":xxx,
       "price":"xxx.xx",
       "currency":"USD"
   }
}

【问题讨论】:

    标签: json-api jsonapiframework


    【解决方案1】:

    您必须向代表该资源集合的 URL 发送 POST 请求,以在 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 它还附带了一个示例。

    【讨论】:

      【解决方案2】:

      您可以在此处检查 URI 的一些命名:https://restfulapi.net/resource-naming/

      【讨论】:

        猜你喜欢
        • 2013-10-12
        • 2013-05-06
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2017-10-31
        • 2017-07-06
        • 2011-06-18
        相关资源
        最近更新 更多