Как лучше всего разработать REST API с несколькими фильтрами? - PullRequest
7 голосов
/ 10 января 2012

Как личный проект по программированию, я работаю над очисткой каталога курсов моего университета и предоставлением данных в виде REST API.Я успешно собрал все данные и сохранил их в базе данных, и сейчас работаю над API.

Курсы могут быть отфильтрованы по многим критериям: преподаватель, колледж, кредиты, время, день и т. Д..

Каков наилучший способ предоставления API в этой ситуации?

Вариант 1

Укажите многочисленные URL-адреса, такие как

example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on

Мне нужен URL для всех перестановок.Это кажется очень громоздким, как для меня, так и для пользователей API, и очень нечистым.

Вариант 2

Предоставлять API только для основных параметров, таких как:

example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>

А если потребитель хочет bycollegeandinstructor, он делаетфильтрация на его конце.

Вариант 3

Пользователь передает мне строку JSON, и я использую ее для получения критериев фильтрации

example.com/api/getcourses/<jsonstring>

jsonstring = 
{ 
  instructor:<instructorcode>,
  college:<collegecode>,
  ...and so on
}

Полагаю, вместо строки Json мне также может потребоваться массив POST, но это кажется неимитирующим для потребителя, так как он получает данные.

Или есть другой способ сделать это, я нев курсе?Если это третий вариант, который является наилучшим вариантом, не могли бы вы предоставить краткую сводку, которая лучше всего подготовит запрос SQL на основе строки JSOn, которая может иметь переменное число значений?

Ответы [ 2 ]

13 голосов
/ 10 января 2012

Чтобы расширить ответ от J.F., звучит так, как будто у вас есть один ресурс, набор курсов, который будет на URI:

/courses

Фильтрация этого ресурса обычно выполняется с использованием параметров запроса для фильтрации этого отдельного ресурса, например:

/courses?college=123&instructor=321

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

Принципиально: есть один ресурс, который можно отфильтровать при необходимости.

5 голосов
/ 10 января 2012
GET example.com/courses?college=<collegecode>&instructor=<instructorcode>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...