Разработка пути restful APIs - для возврата отфильтрованного ресурса и для возврата усеченных свойств ресурса - PullRequest
0 голосов
/ 17 мая 2018

Я не задаю вопрос, который уже задан в В чем разница между @PathParam и @ QueryParam

Этот вопрос связан с «передовым опытом» в отношении спокойного соглашения.

У меня есть вопросный ресурс со следующими полями.

 [  
       {  
          "questionId":6,
          "area":"TECHNICAL",
          "title":"Find the index of first 1 in an infinite sorted array of 0s and 1s",
          "description":"Given an infinite sorted array consisting 0s and 1s. The problem is to find the index of first 1 in that array. As the array is infinite, therefore it is guaranteed that number 1 will be present in the array.",
          "state":"ACTIVE",
          "difficultyLevel":"EASY",
          "skills":[  
             {  
                "skillId":1,
                "skillName":"ALGORITHM"
             },
             {  
                "skillId":2,
                "skillName":"PROGRAMMING"
             }
          ],
          "proposedBy":"agrawalo",
          "noOfTimesUsed":0,
          "examples":null,
          "probes":null,
          "approvedBy":null,
          "addedBy":null,
          "dateCreated":"2018-05-16T19:29:11.113",
          "dateLastUpdated":"2018-05-16T19:29:11.113"
       }, 
       {
        ...
       },
       ...
    ]

Я выставил контроллер отдыха из своего весеннего приложения, чтобы он возвращал все вопросы, используя pathparam "/ questions"

Теперь я хочу создать URL-адреса Rest для следующих случаев (в основном URL-адреса, которые возвращают отфильтрованный набор вопросов, и URL-адреса, которые возвращают часть объекта вопроса). Например:

  1. вернуть только заголовки всех вопросов.
  2. возвращать только названия всех технических вопросов.
  3. возвращать вопросы с навыком в качестве алгоритма.

Я не думаю, что существует стандартное соглашение об этом. Есть? Тем не менее, я хотел бы услышать о том, как люди разрабатывают свои REST API для сценариев использования, как описано выше. Я также хотел бы услышать причину практики.

Ведет здесь ценится.

1 Ответ

0 голосов
/ 17 мая 2018

Как вы упомянули, стандартного способа сделать это не существует.

Я бы сказал, что это два фильтра:

  • возврат .. всех технических вопросов
  • возвращать вопросы с навыком в качестве алгоритма.

В REST фильтры обычно реализуются с использованием параметров запроса.(Параметры пути используются для идентификации ресурсов. Фильтр не является ресурсом, поэтому обычно он не является частью пути)

Это может выглядеть следующим образом:

  • /questions?area=technical
  • /questions?skill=algorithm

Если вам нужны более продвинутые фильтры, вы можете взглянуть на RSQL (например: https://github.com/jirutka/rsql-parser)

Для возврата только заголовков вопросовМожно утверждать, что это могут быть отдельные титульные ресурсы.

Например:

  • /question-titles
  • /question-titles?area=technial

Если вы используете нестандартные типы носителей, вы также можете определить сокращенный тип носителей для этого ресурса и запросить этот тип через Accept -Header: например,

GET /questions?area=technial Accept: application/vnd.yourapp.question.short+json

Или вы можетепредоставьте абоненту больше контроля, используя дополнительный параметр запроса: Например:

  • /questions?fields=title
  • /questions?output=reduced
...