标签: json-api

JSON模式枚举与单值的模式

我有一个示例json:

{
    "type": "persons",
    "id": 2,
    "attributes": {
        "first": "something",
        "second": "something else"
    }
}
Run Code Online (Sandbox Code Playgroud)

我必须为它制作一个模式(使用JSON API规范JSON模式文档):

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "pattern": "^persons$"
        },
        "id": {
            "type": "integer"
        },
        "attributes": {
            "type": "object",
            "properties": {...}
        }
    },
    "required": ["type", "id", "attributes"]
}
Run Code Online (Sandbox Code Playgroud)

问题是:如果"类型"唯一可接受的值是"人",我应该使用模式模式(如上所述)还是枚举类似

"enum": ["persons"]
Run Code Online (Sandbox Code Playgroud)

我无法从文档中得到任何明确的答案,尽管在规范枚举中的示例用于单个值.你有什么看法?

enums json jsonschema json-api

6
推荐指数
2
解决办法
3301
查看次数

是否有在 RAILS API 控制器索引操作中应用过滤器哈希的 DRY 方法?

根据 JSON API 规范,我们应该使用过滤器查询参数来过滤控制器中的记录。filter 参数实际上是什么并没有真正指定,但由于它应该能够包含多个搜索条件,显而易见的事情是使用散列。

问题是,我似乎经常在不同类型记录的控制器操作中重复自己。

以下是仅包含 id 列表(以获取多个特定记录)的过滤器的情况。

def index
  if params[:filter] and params[:filter][:id]
    ids = params[:filter][:id].split(",").map(&:to_i)
    videos = Video.find(ids)
  else
    videos = Video.all
  end
  render json: videos
end
Run Code Online (Sandbox Code Playgroud)

对于嵌套属性检查,我想我可以使用fetchorandand但它看起来仍然不够干燥,而且我仍然在不同的控制器上做同样的事情。

有什么方法可以让这看起来更好,而不是重复我自己吗?

ruby-on-rails dry rails-api json-api

5
推荐指数
1
解决办法
900
查看次数

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

有很多超媒体可用于 Restful api。我不确定哪一个适合哪种情况。这是我第一次尝试 Restful api,所以我无法预见使用它的问题和优势。我想要的是可以查询并且还支持批量(特别是对于 GET 请求)。

Odata 似乎功能齐全,也是绿洲标准,但对我来说似乎有点过分了。其查询能力灵活但复杂。更重要的是,没有任何 odata 4 的 php 实现。如果我使用它,我需要自己做。我现在正在努力避免这种情况。

哈尔似乎太简单了,无法做任何事情。

集合+json看起来不错。但貌似不具备任何批量操作能力

jsonapi:看起来很简单。兼具查询能力和批量操作(带扩展)。但不支持GET请求的批量操作。也处于稳定状态。但我还找不到任何关于它的评论。

您对此有什么经验?我应该如何在其中选择超媒体?任何见解都会有所帮助。我还想听听除此之外的任何其他超媒体。

目前我对 json-api 和 collection+json 感到困惑。

rest odata hypermedia json-api

5
推荐指数
1
解决办法
1068
查看次数

ember js 从 json 获取元信息

我的服务器有一个 json 数据:

{
  "post": {
    "id": 1,
    "title": "Progressive Enhancement is Dead",
    "comments": ["1", "2"],
    "links": {
      "user": "/people/tomdale"
    }
  },

  "meta": {
    "total": 100
  }
}
Run Code Online (Sandbox Code Playgroud)

看起来完全像文档(https://guides.emberjs.com/v2.5.0/models/handling-metadata/)我尝试获取元对象但没有成功

export default Ember.Route.extend({
  model() {
    var data = this.store.findAll('post');
    data.then((result) => {
      let meta = result.get('meta');
      console.log(meta); //this return me undefined
    })
    return data;
  }
});
Run Code Online (Sandbox Code Playgroud)

javascript ember.js ember-data json-api

5
推荐指数
1
解决办法
392
查看次数

JSON API筛选器包含的资源

问题是关于JSON API规范以及请求的正确处理方式(我正在使用ruby on rails和json api resources gem,但这还是一个普遍的问题,我知道如何实现它,我只想遵循JSON的规则API位于:http : //jsonapi.org/format/

情况一:

  • 我想要所有架子
  • 我想把那些书架上的所有书都包括在内
  • 在这种情况下,我应该使用的get是: www.library.com/shelves?include=books

情况2:

  • 我想获取所有书籍,但仅获取标记为未读的书籍

  • 我应该使用的get是: www.library.com/books?filter[unread]=true

设计包含未读书籍的所有书架的要求的正确方法是什么?

想不通这个

www.library.com/shelves?include=books&filter[books.unread]=true

www.library.com/shelves?include=unread_books?<-必须指定其他资源,即未读的书

www.library.com/shelves?filter[books.unread]=true

最正确的方法是什么?

编辑

与我的技术负责人和其他一些程序员交谈后,在这种情况下,最优先选择第一个选项

json json-api jsonapi-resources

5
推荐指数
1
解决办法
5732
查看次数

Rails Active Model Serializer 包含在控制器中而不注入,与包含的参数有很多关系

我看到关于 Rails 5、活动模型序列化器和 json-api 适配器的奇怪行为。

\n\n

给定以下带有Rolify gem 的用户模型:

\n\n
class User < ActiveRecord::Base\n  #\n  # Gem Includes\n  #\n  rolify\n\n\n  # Include devise modules.\n  devise :database_authenticatable,\n      :recoverable, :rememberable, :trackable, :validatable\n  include DeviseTokenAuth::Concerns::User\n\n  #\n  # Callbacks\n  #\n  after_create :assign_default_role\n\n  #\n  # Attributes\n  #\n  attr_accessor :remote_image\n\n  #\n  # Validations\n  #\n  validates :name, presence: true, length: {in: 1..100}\n  validates :last_name, presence: true, length: {in: 1..100}\n  validates :role_ids, presence: true, on: :update\n\n  #\n  # Relations\n  #\n  belongs_to :current_scenario, class_name: "Scenario"\n\n\n  #\n …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails active-model-serializers json-api ruby-on-rails-5

5
推荐指数
1
解决办法
2274
查看次数

Jsonapi 资源不存在:404 或 { "data": null }?

如果客户端请求我的 REST 应用程序中不存在的资源,例如

\n\n
http://localhost:8080/app/foo/1\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且该 id 不存在 Foo 资源,我应该返回 404 错误代码吗?或者我应该返回 200 ,主体为{"data": null }

\n\n

从 ember 数据中读取这个线程让我觉得我应该返回 404。

\n\n

但是当我从 JSONAPI 规范中读到这段话时,我觉得我应该返回{"data " : null}

\n\n
\n

主要数据必须是:

\n\n
    \n
  • 单个资源对象、单个资源标识符对象或 null(对于针对单个资源的请求)
  • \n
  • 资源对象数组、资源标识符对象数组或空数组 ([]),用于针对资源集合的请求
  • \n
\n
\n\n

因为这个案例似乎针对的是单一资源。

\n\n

在解析数据部分它说:

\n\n
\n

服务器必须使用 200 OK 响应来响应成功获取单个资源或资源集合的请求。

\n
\n\n

“成功”是什么意思?如果查询没有找到任何内容,因为那里没有条目,则查询运行并获得了准确的结果,是否成功?

\n\n

同一部分的下面是:

\n\n
\n

仅当请求的 URL 可能对应于单个资源但当前不对应于\xe2\x80\x99t 时,null 才是合适的响应。

\n
\n\n

我不清楚这是什么意思。

\n\n

那么它是哪一个以及为什么?

\n\n

(这并不是专门针对 ember-data,我想澄清一下我应该做什么才能符合规范。我只提到 ember-data,因为它似乎是 …

rest json hateoas json-api

5
推荐指数
1
解决办法
2351
查看次数

Laravel 授权前检查 FormRequest 的验证规则

我正在使用 JSON:API 规范在 Laravel 中实现 API。

其中我有一个资源,我们称之为池塘,与另一个资源具有多对多关系,我们称之为鸭子。

根据 JSON:API 规范,为了删除这种关系,我应该使用 DELETE /ponds/{id}/relationships/ducks端点,并请求以下正文:

{
    "data": [
        { "type": "ducks", "id": "123" },
        { "type": "ducks", "id": "987" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是由 PondRemoveDucksRequest 处理的,如下所示:

<?php
...
class PondRemoveDucksRequest extends FormRequest
{
    public function authorize() 
    {
        return $this->allDucksAreRemovableByUser();
    }

    public function rules()
    {
        return [
            "data.*.type" => "required|in:ducks",
            "data.*.id" => "required|string|min:1"
        ];
    }

    protected function allDucksAreRemovableByUser(): bool
    {
        // Here goes the somewhat complex logic determining if the user is authorized 
        // …
Run Code Online (Sandbox Code Playgroud)

php laravel json-api

5
推荐指数
1
解决办法
3593
查看次数

如何使用 OpenAPI-3.0 表达 JSON-API 稀疏字段集

我正在为我的 API 实现 OpenAPI-3.0 规范,并且我计划使用稀疏字段集作为 GET 的参数。使用 style=deepObject 的参数示例有点稀疏,所以我不确定我是否完全正确。

- in: query
  name: fields
  style: deepObject
  schema:
    type: object
    additionalProperties:
      type: string
Run Code Online (Sandbox Code Playgroud)

我可以结合 deepObject 和 additionalProperties 选项吗?

我想支持这样的灵活查询参数输入: GET /articles?include=author&fields[articles]=title,body&fields[people]=name 但我不想为每个资源和字段拼出每个选项。

json-api openapi

5
推荐指数
1
解决办法
677
查看次数

与使用 JSON-LD 相比,使用 JSON-LD 有什么明显的优势吗?JSON:REST 端点的 API?

我想创建一组 REST API 端点来公开各种数据源。我希望我的端点符合Richardson 成熟度模型,特别是对 HATEOAS 的支持。

我查看了JSON-LDJSON:API,它们似乎都很合适,因为它们都可以同等支持 REST 和 HATEOAS,但是 JSON:API 还有许多其他功能,这些功能更像“gRPC” '。

与使用 JSON-LD 相比,使用 JSON-LD 有什么明显的优势吗?JSON:REST 端点的 API?适用于 REST 的功能差异有哪些?

rest json-ld json-api

5
推荐指数
0
解决办法
535
查看次数