Объединение запросов API в пакеты

Я создаю REST API, и я играл с идеей объединения запросов от клиентов. Под объединением я подразумеваю, что они могут отправить один запрос, содержащий несколько «реальных» запросов, и они будут доставлены клиенту вместе. Обычно запросы javascript ajax. Примерно так:

POST /bundlerequest

["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ] 

(Объединенный запрос может быть только запросом GET, по крайней мере, на данный момент) Это предназначено для возврата примерно следующего вида

{
    "success" : ["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ],
    "error" : [],
    "completiontime" : 94,
    other relevant metadata...
    "responses" : [
        {"key" : "/person/3243" , "data" : {"name" : "John", ...} },
        {"key" : "/person/3243/friends" , "data" : [{"name": "Peter", "commonfriends" : 5, ...}] },
        etc...
    ]
}

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

Итак, мой первый вопрос: хороший ли мой подход к этому? Есть ли у кого-нибудь опыт в том, чтобы делать что-то подобное?

На самом деле, обычный способ решения этой проблемы - написать код на стороне сервера, чтобы возвращать объединенные данные, которые, как я считаю, актуальны для клиента (ов). (Например, пользовательский поток твиттера делает это, объединяя информацию о человеке, последние твиты, последние личные сообщения и т. Д.) Но это делает API очень самоуверенным, и когда клиенту нужны изменения, серверу, возможно, придется изменить, чтобы приспособиться к оптимизации.

И второй вопрос: как это реализовать?

Мой бэкэнд - это ASP.NET MVC 3 и IIS 7. Должен ли я реализовать его в приложении, имея действие bundlerequest, которое внутренне вызывает другие действия, указанные в запросе ?

Можно ли реализовать это напрямую в IIS 7? Написание модуля, который прозрачно перехватывает запросы к / bundlerequest, а затем вызывает все соответствующие подзапросы, из-за чего приложение полностью не знает о происходящем связывании? Это также позволило бы мне реализовать это независимым от приложения способом.

8
задан Martin Hansen 14 October 2011 в 09:23
поделиться