【问题标题】:Ask for valid attributes in JSON:API spec请求 JSON:API 规范中的有效属性
【发布时间】:2021-02-06 04:13:27
【问题描述】:

我想为我的新 REST API 使用 JSON:API。规范听起来不错,一切都很好。我唯一缺少的是一种询问实体有效属性的方法。

如果还没有实体,我发现没有记录的可能性来查看我需要哪些属性来创建一个新的。有没有人有同样的问题或解决这个差距的好方法?

示例

请求获取文章列表

GET /articles HTTP/1.1
Accept: application/vnd.api+json

响应(零篇文章)

HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
  "links": {
    "self": "http://example.com/articles"
  },
  "data": []
}

=> 这里我缺少一个调用来检索新文章实体的可用属性

请求创建文章

POST /photos HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json

{
  "data": {
    "type": "articles",
    "attributes": {
      "title": "New Article" <= i have to know this attribute
    }
  }
}

【问题讨论】:

    标签: json-api


    【解决方案1】:

    JSON:API specification 不包括类型系统。这是与GraphQL 相比的限制之一。但是 JSON:API 可以结合其他标准来满足这些要求。

    例如,您可以提供一个OpenAPI 接口(以前称为 Swagger)来为您的整个 API 提供机器可读的类型信息和文档。

    作为 OpenAPI 的替代方案,您可以使用 JSON Schema 来描述每个资源的接口。 OpenAPI 支持 JSON Schema 的一个子集。所以两者可以很好地结合。

    您的问题部分暗示您可以根据资源对象派生资源架构。我不建议这样做:

    • 资源对象可能不包含所有字段。由于使用Sparse Fieldset,某些文件可能会被隐藏。或者服务器可能默认不包含所有字段。
    • 一个属性可以支持多个值。例如。 null 可能是一个有效值,即使该属性是一个资源对象的字符串。
    • 属性可能需要遵循验证规则才能具有相同的类型。例如。日期属性可以编码为 JSON 中的字符串 "2020-01-01T00:00:00.000Z"。但这并不意味着所有字符串都是该属性的有效值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2023-03-27
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多