Подтвердить что ты не робот

Способ указания списка полей ресурсов в запросе API RESTful

У меня есть RESTful API в веб-сервисе с такими ресурсами, как пользователи, сообщения и т.д. Когда я делаю запрос на список сообщений (GET/posts), я хочу получить массив сообщений только с уменьшенной частью данных для каждого сообщения (т.е. Темы, имени автора). Когда я делаю запрос на конкретный пост (GET/posts/42), я хочу получить полный список полей post object, включая большой почтовый ящик, дополнительную информацию о том, как нравится подсчет, количество комментариев. Я полагаю, существует множество способов решения этой проблемы. На мой взгляд, 3 наиболее очевидны:

  • Явное указание полей по каждому запросу (/posts? fileds = subject, author_name и для /сообщений/42? = поля предмет, тело, createaAt, author_name, comments_count, LIKES_COUNT и т.д...).
  • Явным образом укажите список полей только в том случае, если он отличается от стандартного список полей.
  • Укажите список полей, которые должны быть исключены (или inlcuded) из (до) полей по умолчанию, заданных, если желаемые поля устанавливаются по-разному.

Я создаю ясный и полезный API для своих клиентов. Какой способ выбрать?

4b9b3361

Ответ 1

Я бы выбрал вариант 2 IMHO.

Итак, если потребитель просто запрашивает url ресурсов (/posts/42), они получают поля по умолчанию.

Затем потребители могут изменить ответ по умолчанию, задав значения в querystring, например:/posts/42/fields? subject, author_name

Это хорошо сработало для меня в прошлом и как работают некоторые другие хорошо известные API. Facebook

Изменить: Оглядываясь назад, я бы изменил запрос:/posts/42? fields = subject, author_name,/post/42 - это поля ресурсов.

Ответ 2

Проводили исследования в этом, а также указали на Facebook GraphQL в качестве альтернативы запросить приятный api с нужными полями. Он все еще находится на ранней стадии, но кажется очень перспективным.

https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html

EDIT: Воспроизводится по URL-адресу:

Запрос GraphQL - это строка, интерпретируемая сервером, который возвращает данные в указанном формате. Вот пример запроса:

{
  user(id: 3500401) {
    id,
    name,
    isViewerFriend,
    profilePicture(size: 50)  {
      uri,
      width,
      height
    }
  }
}

(Примечание: этот синтаксис несколько отличается от предыдущих примеров GraphQL. Недавно мы улучшили язык.)

И вот ответ на этот запрос.

{
  "user" : {
    "id": 3500401,
    "name": "Jing Chen",
    "isViewerFriend": true,
    "profilePicture": {
      "uri": "http://someurl.cdn/pic.jpg",
      "width": 50,
      "height": 50
    }
  }
}