Restful API - обработка больших объемов данных

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

Например, если я использую метод GET для myapi.co.uk/messages/, это приведет к возврату XML для всех записей сообщений, которые в некоторых случаях могут быть 1000. Это делает использование API очень медленным.

Может ли кто-нибудь предложить лучший способ справиться с этим? Стандартно ли возвращать результаты пакетами и указывать размер партии в запросе?

Ответ 1

Вы можете изменить свой API, чтобы включить дополнительные параметры, чтобы ограничить объем данных, возвращаемых вашим приложением.

Например, вы можете добавить параметры limit и offset, чтобы извлечь небольшую часть. Так можно сделать разбивку на страницы в соответствии с REST. Такой запрос приведет к извлечению 10 ресурсов из коллекции сообщений с 21 по 30-е. Таким образом, вы можете запросить определенную часть огромного набора данных:

myapi.co.uk/messages?limit=10&offset=20 

Другим способом уменьшить полезную нагрузку будет только запрос определенных частей представления ваших ресурсов. Вот как это делает facebook:

/joe.smith/friends?fields=id,name,picture

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

Я настоятельно рекомендую просмотреть эту презентацию по дизайну API RESTful apigee (вызывается скринкаст "Научите собаку ОТДЫХАТЬ" ). Здесь обсуждаются хорошие практики и четкие идеи для решения повседневных проблем.

EDIT: видео обновлено несколько раз, так как я опубликовал этот ответ, вы можете проверить 3-е издание с января 2013 года