2017-02-10 11 views
0

Мне нужно определить REST API, который должен использовать уникальный идентификатор объекта и возвращать содержимое. Содержимое извлекается из базы данных и имеет тип JSON. Итак, у меня есть REST URL, как это -Получить только определенные свойства с помощью REST GET API

GET /data/{typename}/{objectid} 

Это возвращает все содержимое объекта.

Однако содержание объекта может быть большим по размеру, и поэтому вызывающий может хотеть указать только некоторые или несколько свойств, которые будут отправлены в качестве ответа. Естественная мысль, которая приходит ко мне, - добавить BODY в API GET, где пользователь может указать список имен свойств для этого объекта, который будет извлечен. Но, проведя дальнейшие исследования, похоже, что GET API с BODY не рекомендуется. Другой вариант, что я могу думать о том, чтобы передать имена свойств в строке запроса -

GET /data/{typename}/{objectid}?property=prop1&property=prop2... 

Но список легко может стать большим.

Любое предложение о том, как должен выглядеть мой API? Должен ли я использовать POST?

+0

Будет ли исключение свойств сделать URL короче в вашем случае? Например, '? Excludes = thisProp, thatProp, anotherProp'? – sp00m

+0

Возможный дубликат [RESTful API, если строка запроса недостаточно длинная?] (Http://stackoverflow.com/questions/41741356/restful-api-what-if-the-query-string-isnt-long -enough) – sp00m

+0

Здесь речь идет не о длине строки запроса. Проблема заключается в том, чтобы понять, как передать дополнительные параметры, которые повлияют на ответ API GET. – tyrion

ответ

0

Использование POST не является правильным. пока вы читаете, используйте GET. Например, Facebook имеет аналогичный вариант использования, когда конечная точка /me имеет много фильтров, а вызов GET.

Окончательный URL является /me?fields=id,name,about,age_range,devices,currency,education

Вы можете попробовать сами здесь https://developers.facebook.com/tools/explorer/145634995501895/?method=GET&path=me%3Ffields%3Did%2Cname%2Cabout%2Cage_range%2Cdevices%2Ccurrency%2Ceducation&version=v2.8

Технически, используя POST будет работать, но это очень плохой дизайн.

+0

Спасибо за ответ. Я действительно чувствую, что POST не может быть правильным способом. Пример facebook дает мне уверенность в том, что строка запроса может быть правильным способом. Однако у меня нет входа в facebook, так что я не вижу его в действии, но я получаю суть. – tyrion

+0

Наверху вы технически верны, что для получения данных запрос 'GET' является наиболее правильным, у вас действительно есть жесткий предел длины строки запроса, которая может быть проблемой, например, с использованием datatables. https://datatables.net/examples/server_side/post.html Сгенерированная строка запроса достигает предела очень быстро. –

+0

Как вы думаете, «как исключение имен полей было бы проблемой? – tyrion

0

Я бы рекомендовал использовать POST, потому что GET имеет ограничение по длине. What is the maximum length of a URL in different browsers?

иначе вы могли бы сделать строка запроса выглядеть следующим образом (для массива) так близко :)

GET /data/{typename}/{objectid}?property[]=prop1&property[]=prop2... 

 Смежные вопросы

  • Нет связанных вопросов^_^