Каков наилучший способ создания сложных запросов RESTful? - PullRequest
6 голосов
/ 19 декабря 2008

Как лучше всего получать сложные запросы из службы REST?

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

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

Я думал об использовании POST для отправки объекта XML, описывающего запрос, примерно так:

http://mydomain/collections/complexQuery

Он вернул бы уникальный идентификатор, а затем я мог бы использовать GET для получения результата complexQuery:

http://mydomain/collections/complexQuery/{queryId}

Джейсон С:

Это идея. POST примет XML-представление запроса с уже имеющимися параметрами "где" (их может быть слишком много). Запрос будет выполнен только тогда, когда прибудет GET. Я мог бы сделать объект запроса доступным только на некоторое время и удалить его позже.

Это хорошее решение? Я все еще в восторге от этого?

Ответы [ 4 ]

2 голосов
/ 19 декабря 2008

Звучит здорово, если вы используете уникальный идентификатор. Если набор результатов запроса большой, вы можете включить способ запроса строк набора результатов M - N, где M, N - параметры.

Полагаю, преимущество вашего подхода с уникальным идентификатором (с состоянием определения запроса, хранящегося на сервере) состоит в том, что вы можете использовать результат запроса в качестве параметра другого запроса. Возможно, даже отделить POSTING от определения запроса от его выполнения.

2 голосов
/ 19 декабря 2008

Это стандартный подход RESTful. POST для ресурса и ожидайте 201 Created (без тела объекта) с URI для созданных результатов в заголовке Location. Вы также можете вернуть результаты с ответом 200 OK и, при необходимости, с URI, указывающим на результаты для будущей (де) ссылки в ответе, вместе с копией результатов.

1 голос
/ 16 мая 2009

прости, мое невежество ...

а почему бы просто не вернуть данные с постом ???

Я могу понять, почему неправильно обновлять данные с помощью get, но я не понимаю, почему необходимо обязательно обновлять данные с каждым сообщением?

Я также понимаю, что идея заключается в том, что каждый метод get может быть потенциально кэширован (потому что они не изменяют данные), но в этом случае они могут кэшироваться, только если временно сохраненный запрос все еще активен ..., который добавляет еще один уровень сложности ...

Я также подумал, что одним из принципов отдыха является определение интерфейсов без сохранения состояния (например, протокола HTTP), и в этом случае сервер поддерживает состояние для решения запроса ...

Я только начал читать об отдыхе, и есть некоторые вещи, которые я просто еще не понимаю ...

1 голос
/ 17 января 2009

Это нормально. Но это создает несколько проблем:

  1. Вам нужно сохранить данные запроса на сервере, когда вы очищаете старые запросы?
  2. Если вы очищаете старые запросы, это означает, что вы не можете предоставить ссылки на сохраненные запросы, поскольку они, возможно, уже были очищены.

  3. Даже простой запрос требует двух циклов (POST и затем GET)

  4. Ваш клиент должен быть знаком с ожидаемой XML-схемой, а не с хорошо известной: param1=val1&param2=val2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...