JSONAPI 实现

Posted

技术标签:

【中文标题】JSONAPI 实现【英文标题】:JSONAPI implementation 【发布时间】:2020-06-06 11:19:20 【问题描述】:

我一直在研究以找出实现标准 JSONAPI (https://jsonapi.org) 的方法,但我没有找到真实的来源或令人信服的实现方法。

为了在实际示例中表示这一点,我们有以下响应


  "data": 
    "type": "articles",
    "id": "1",
    "attributes": 
      // ... this article's attributes
    ,
    "relationships": 
      // ... this article's relationships
    
  

所以我们预期的实体是文章,也可能是作者。这些实体存储在数据库(SQL 或 NoSQL)中,并且可以使用任何工具来查询数据(Mongoose、Knex、typeorm..etc)

从数据库返回的预期结果是(从文章中选择第一个)


  "name":"article1",
  "id":"1"

问题是处理来自 DB 的响应并将其转换为 JSONAPI 标准的最佳位置在哪里?是模型层吗?控制器?查看或添加表示层?

我一直在考虑一种通过使用模板引擎(pug、Handlebars..etc)来实现这一点的方法,但这是个好主意吗?因为模板引擎目标是 html 而不是 JSON?

如果使用模板引擎呈现 JSON 是个好主意,是否有任何可用的 JSON 模板引擎来生成 JSON?

可以查看任何建议或指南或编写良好的示例吗?

谢谢。

【问题讨论】:

我想不出你为什么想要一个模板引擎。应该只是JSON.stringify() 【参考方案1】:

我是在我的 NestJS 应用程序的控制器中使用jsonapi-serializer 完成的。我为 JSON API 序列化创建了一个服务。对我来说,这似乎是最好的关注点分离。控制器从服务中获取数据,然后调用序列化服务,然后将响应传回给调用者。

【讨论】:

以上是关于JSONAPI 实现的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Java / Spring MVC 返回基于 jsonapi.org ID 的格式?

JSONAPI:更新关系,包括属性

ExtJS 模型与 jsonapi 规范的关联

如何使用 Flask-rest-jsonapi / JSON API 在同一个 POST 方法中创建对象和相关对象?

JSON API

HAL、JSONAPI、Collection+json、odata 其他超媒体的优缺点