如何使用jsonapi格式发送不相关的数据

时间:2017-05-01 15:05:17

标签: json elixir phoenix-framework json-api

我正在尝试在jsonapi specfication [http://jsonapi.org/]之后构建一个api。我想从两个不同的表中发送不相关的数据。我该怎么发送它。我可以发送如下。根据规格,它是正确的方式吗?理想情况下,我们应该为此目的设置单独的端点,但由于涉及额外的n / w请求,我不想创建单独的端点。

{
  data: [
    {
      type: "user",
      atrributes: {
        ...
      } 
    },
    {
      type: "company",
      attributes: {
        ...
      }
    }
  ]
 }

目前我还在使用ja_serializer [https://github.com/vt-elixir/ja_serializer/]来序列化json。是否可以将来自多个表的无关数据序列化在一起

1 个答案:

答案 0 :(得分:0)

简短回答: 严格来说,作为JSON-API你不能这样做。

答案很长:

0)不要让生活变得复杂

问问自己避免额外请求的好处是否值得额外的代码复杂性。如果您在HTTP / 2上运行服务器,那么额外的网络开销将是最小的。

在许多情况下,如果您将其保持简单并在以后分开 - 当您想要执行不同的请求或仅将公司与其他类型或资源等组合时,您将填写查找回报。

1)包装多个JSON-API响应

但是如果你真的想要JSON-API和单个请求,那么你可以做的就是将2个JSON-API响应包装成一个。有人这样想:

{
  "responses": [{
     "name": "companies",
     "jsonapi": {"data": ... }
  }, {
     "name": "users",
     "jsonapi": {"data": ... }
  }]
}

然后在客户端中,您可以将它们分解并在标准JSON-API库中用作分离的资源。

2)尝试找到常见的“父”并使用JSON-API

中的关系

你说这些资源是无关的,但如果你想要一起请求它们,它们必须有一些共同之处。也许它就像“组织”(你),有很多公司和用户?

3)其他选项

JSON-API旨在将对象直接映射到REST映射。如果您不需要它,JSON-API不适合您的目的。

也许像GraphQL这样的东西会更适合你。或者只是选择专有格式。