Параметры и т. Д. В моем REST-сервисе - PullRequest
1 голос
/ 30 января 2012

Я создаю веб-сервис REST и, конечно, провел некоторое исследование, но все еще остались некоторые вопросы без ответа. Мой сервис будет возвращать JSON только для начинающих.

1. Я остановился на использовании параметров запроса для моего GET, например

/api/users/54354/?fields=name,age 

для получения имени и возраста от пользователя с id = 54354. Кажется, есть большие дискуссии о том, какой подход выбрать, но это, кажется, начальный путь. Для моего POST, PUT я, конечно, использую тело для этих параметров. Каково ваше мнение об этом подходе, и, пожалуйста, расскажите, если вы видите, что оно решается иначе.

2: При использовании GET (или POST и PUT в этом отношении), как бы вы указали запросы с помощью операторов, таких как "lastname starts with 'Pe'" или "Age between 10 and 20"? Я размышляю, имеет ли смысл помещать полный запрос в какой-либо объект. Э.Г.

api/users/?filter={'name':{'startsWith':'Pe'},'Age':{'Min':10},'Age':{'Max:'20}}

Этот тип применяет синтаксис JSON к опрашивающим, но я не уверен, есть ли другой подход "наилучшей практики" к этому. Вышесказанное потребует парсера / верификатора в службе для проверки действительных фильтров и т. Д.

3: Последнее, что нужно сделать, это применить к нему операции И и ИЛИ. Я думаю, это может работать и в объекте JSON.

Надеюсь, некоторые из вас, ребята, могут дать некоторые отзывы по этому вопросу:)

1 Ответ

1 голос
/ 31 января 2012
  1. Интересно, стоит ли вам действительно извлекать отдельные поля? Поскольку вы пользователь представляете ресурс, вы должны получить весь ресурс и извлечь необходимую информацию из json в вашем клиенте. Если вы прикрепили к пользователю ресурсы, которые слишком велики для передачи по запросу, они должны быть смоделированы как подресурсы (/api/users/54354/subresource).

  2. Использование JSON-синтаксиса в запросах не представляется мне лучшей практикой, поскольку фигурные скобки считаются небезопасными символами, которые следует кодировать. Вы можете указать запрос с помощью /api/users?nameStartsWith=pe&age=10-20. Знак вопроса должен следовать за идентификатором ресурса, а не за косой чертой. Амперсанд обозначает логическое И, а минус обозначает диапазон.

  3. Это зависит от сложности ваших запросов. Вы можете использовать списки значений после =, такие как startWithName=pe,foo,bar, чтобы разрешить разобщение там. Это должно даже работать с диапазонами age=10-20,33,40-50. Вы могли бы использовать &, как указано для AND, и + для OR (+ часто используется как AND в API, но хорошо ...). Когда вы включаете скобки, вы можете вкладывать такие выражения ... если вам нужно. Но я серьезно сомневаюсь, что вам следует это делать, поскольку для таких сложных запросов существуют специальные языки поисковых запросов.

...