2014-02-04 6 views
0

У нас есть не такой RESTful API, который используется нашими приложениями для одной страницы и мобильными приложениями.RESTful API с пакетными запросами

Это не так RESTfu, поскольку в прошлом URI вернули все, что было полезно для конкретной страницы. Это привело к большому количеству конечных точек, многие из которых имеют очень похожие ответы.

Datawise У нас есть ресурсы с десятками связанных ресурсов. В некоторых случаях мы хотим вернуть эти связанные ресурсы, или некоторые из них, и другие случаи, которых у нас нет. Некоторые из них медленно возвращаются, и поэтому мы хотим их только в определенных случаях.

Проблема, с которой мы столкнулись, заключалась в разделении данных на значимые URI, без необходимости другого запроса на получение каждого связанного ресурса.

поэтому мы рассматривали конечную точку/пакет, где запрос POST, содержащий несколько запросов в теле, мог выполнять эти запросы параллельно на сервере. Например https://developers.facebook.com/docs/graph-api/making-multiple-requests

Таким образом, мы могли бы разделить данные на значимые URI и не должны составлять 20 запросов API для каждой страницы.

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

ответ

0

Дозирование в порядке - не допускайте, чтобы образцы дизайна RESTful управляли вами по пути к плохой производительности.

Возможно, что ваше решение для дозирования может быть сконструировано таким образом, что каждый кусок, который можно выставить, можно назвать отдельно. Если это так, может быть просто создать конечные точки RESTful для каждого, а также для тех, кто захочет этого за счет нескольких раундов.

Вы также можете использовать параметры запроса для выбора разных, упакованных возвратов ресурсов. Например, для пользователя, вы можете использовать что-то вроде:

GET /v1/users/1?related={none,all,basic} 

Вы также можете использовать селектор поля:

GET /v1/users/1?data=addresses,history 
+0

Batching GET-запросы прерывают кеширование, которое является одним из краеугольных камней хорошей производительности сети. –

+2

Преимущества кэширования начинаются со второго запроса ресурса. Возможно, имеет смысл выполнить пакет GET-запроса, если шансы получить преимущества кэширования будут незначительными или отсутствующими. Даже при кэшировании каждый запрос представляет некоторые накладные расходы. – Greggg

1

HTTP/2 будет сделать эту проблему уйти, позволяя мультиплексировать запросы по одному соединению.

В то же время я бы предположил, что вы не нарушаете ограничений REST с вашим текущим решением. Однако создание пакета запросов нарушает ограничение идентификации ресурса, которое окажет существенное влияние на кешируемость представлений.

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