Правильный способ обработки большого количества ресурсов отношений ресурса в формате JSON: API (Content-Type application / vnd.api + json) - PullRequest
0 голосов
/ 20 сентября 2019

Я строю API и пытаюсь решить следующую проблему:

Клиент отправляет заголовок Accept с помощью application / vnd.api + json, поэтому я отвечаю с ресурсом в JSON: API формат.

Приведены, например, следующие таблицы:

  • Автор
  • Статья

которые имеют отношение 1: n - например, один автор написал 100 статей .

Моя цель:

GET/ author

возвращает автора (объект ресурса) с определенным числом статей (объектов ресурса отношений) - например, первые 3 статьи, которые он написал.

В этом формате:

{
  "links": {
    "self": "http://example.com/author",
    "next": "http://example.com/author?page[offset]=2",
    "last": "http://example.com/author?page[offset]=10"
  },
  "data": [
    {
      "type": "author",
      "id": "1",
      "attributes": {
        "name": "Arthur"
      },
      "relationships": {
        "article": {
          "count": 100,
          "links": {
            "self": "http://example.com/author/1/relationships/article",
            "related": "http://example.com/author/1/article"
          },
          "data": [
            {
              "type": "article",
              "id": "4",
              "attributes": {
                "title": "1 reason why I should use json:api"
              },
              "links": {
                "self": "http://example.com/article/4"
              }
            },
            {
              "type": "article",
              "id": "7",
              "attributes": {
                "title": "2 reasons why I should use json:api"
              },
              "links": {
                "self": "http://example.com/article/7"
              }
            },
            {
              "type": "article",
              "id": "42",
              "attributes": {
                "title": "3 reasons why I should use json:api"
              },
              "links": {
                "self": "http://example.com/article/42"
              }
            }
          ]
        }
      }
    }
  ]
}

Моя идея:

Использовать параметр запроса, например

http://example.com/author?relationship[]=article,orderby=date,asc=true,limit=3

tl; dr:

Как правильно ограничивать / разбивать на страницы связанные ресурсы в формате JSON: API?

1 Ответ

0 голосов
/ 24 сентября 2019

Спецификация не распространяется на нумерацию страниц и сортировку включенных связанных ресурсов.Я бы порекомендовал не включать связанные ресурсы, а вместо этого использовать ссылку на связь, если вам нужна нумерация страниц или их сортировка.Недостатком является дополнительный запрос ...

Кроме того, я заметил, что ваш ответ не является жалобой с JSON: API.Для привязки ресурса необходимо использовать объект идентификатора ресурса (has-one) или список объектов идентификатора ресурса (has-many).

Вы используете полноересурсные объекты.Разница заключается в клавишах attributes и links.Связанные объекты ресурсов могут быть включены в ответ с использованием составного документа .

Ваша идея использовать параметр запроса, позволяющий клиенту контролировать включение связанных ресурсов, фактически является частью спецификации.Поэтому он использует параметр запроса include.Это подробно описано в Включении связанных ресурсов глава спецификации.Но, как было сказано ранее, это не распространяется на нумерацию страниц и сортировку включенных ресурсов.

...