2015-02-13 2 views
1

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

Пример:
вопрос: «Где я могу взять ручку?».
ответ # 1: «Вы можете купить ручку в магазине».
ответ # 2: «Вы можете взять его у друга».

Для следующей ситуации можно использовать следующие REST ресурсы:

GET /questions 
GET /questions/{question_id} 

GET /questions/{question_id}/answers 
GET /questions/{question_id}/answers/{answer_id} 

Однако некоторые вопросы могут иметь такие параметры, как:

«Каково расстояние между {местоположения А } и {location B}? "
«Каков статус полета {flight_number}?"

Каков наилучший способ представить такие вопросы и ответы для них как ресурсы REST?

+0

Как эти параметры проявляются? Например. скажем, я являюсь потребителем вашего REST API, и задаю вопрос, могу ли я задать вопрос между произвольными местоположениями или только между поддерживаемыми вами точками. –

+0

Вы можете задать расстояние между произвольными точками. –

+0

Но имейте в виду, что различные типы вопросов могут содержать разные параметры или могут быть без каких-либо параметров. Еще один пример: «Каков статус полета {flight_number}?». Просто добавьте этот пример в свой первоначальный вопрос, чтобы сделать его более понятным. –

ответ

1

Вы можете использовать следующие ссылки:

GET /questions/{question_id}/locationA:Zurich/locationB:Budapest/flightNumber:1234/answers 

GET /questions/{question_id}/answers?locationA="Zurich"&locationB="Budapest"&flightNumber=1234 

Теперь я не уверен, что вам нужен вопрос идентификатор здесь. Если существует ограниченное количество типов вопросов, вы можете добавить путь для каждого из них.

GET /questions/distance/from:"Zurich"/to:"Budapest" 

Вы можете сгенерировать это автоматически из названия вопроса:

GET /questions/what-is-the-distance/between:"Zurich"/and:"Budapest" 

Чтобы быть честным структура URI действительно не имеет значения по REST услуг, так как он используется только на машинах и, возможно, разработчиками для настройте маршрутизацию. Клиенты REST должны следовать за ссылками вместо создания URI (HATEOAS constraint). Поэтому большинство API-интерфейсов не являются REST, и большинство их клиентов не являются клиентами REST ...

+0

Мне это хорошо. Благодаря! –

0

Хорошо, я думаю, вы могли бы построить что-то вроде этого

GET /question /{questionid}?location=a&location2=b 

И

GET /question /{questionid}?number=12345 

Но, это будет иметь много вещей, чтобы рассмотреть.

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

Извините, это не так много, поскольку я надеялся, что это произойдет, когда я начну. :)

+0

ОП пытается представить вопросы и ответы в формате URI - а не как получить расстояние между a и b. – Tim

+0

Хм, меняет контекст немного хорошо, мой плохой. –

+0

У меня подобные мысли. Имена параметров не являются большой проблемой прямо здесь, я думаю - возможно использовать param_1, param_2, ... или что-то в этом роде. Если не все предоставленные параметры, то это означает, что вопросы не найдены, если есть слишком много параметров, тогда я могу просто игнорировать дополнительные. Что такое формат URI для ответов: **/questions/12? Param1 = value1/answers **? –

0

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

Предоставить переменные в виде списка пар значений ключа (или словаря) в теле.

+0

Спасибо. Это имеет смысл, но что вы предлагаете для вопросов без параметров? Использование POST с пустым телом не выглядит солидным. –

+0

Можете ли вы классифицировать свои вопросы на две части? и использовать то, что удовлетворяет. – Guanxi

+0

Несомненно, это возможно. Но будет ли это выглядеть с точки зрения архитектуры? Чтобы задать некоторые вопросы, я должен использовать POST, а иногда я должен использовать GET ... Тогда я предпочел бы думать о вопросах с параметрами как «шаблоны вопросов» ... –

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