Как бы вы разработали RESTful сервис конвертации? - PullRequest
0 голосов
/ 17 августа 2011

Мы создаем сервис для преобразования из одного формата в другой.Примерами конверсий являются валюты, расстояния, время, языки и т. Д. В нашем случае это географические точки (например, от десятичных градусов широта / долгота до градусов-минут-секунд широта / долгота).

Обычно RESTfulРесурс имеет аналогичную концепцию OO, которая является постоянной на стороне сервера и может быть взломана (я знаю, что это только часть того, что делает RESTful), но в случае простой службы, которая преобразует вещи, которые не обязательно существуют.Как можно сделать это RESTful?В настоящее время у нас есть что-то вроде этого:

Чтобы получить список поддерживаемых форматов, можно сделать это:

GET /coordinates/formats

, который будет возвращать список форматов, включая, например, DD и DMS (десятичные градусы и градусы-минуты-секунды).

Затем можно повернуться и выполнить преобразование следующим образом:

POST /coordinates/DD/as/DMS

В этом примере можно передать представление десятичных градусов (какJSON или некоторый другой формат) в теле запроса и получить представление градусов-минут-секунд в теле ответа.

Это, конечно, работает, но не очень хорошо, особенно потому, что тот же URI используется поверхи более для разных входов (разные десятичные градусы).Хитрость заключается в том, чтобы действительно сконцентрироваться на том, каким ресурсом манипулируют.Возможно, это «Преобразование»:

POST /coordinate/conversions

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

Мысли?

1 Ответ

2 голосов
/ 18 августа 2011

Я бы предложил использовать параметры и GET.Я также переключил бы элементы пути и сделал бы /conversions вашим корневым ресурсом, поскольку преобразование - это ваше «доменное ядро».

Основными причинами являются:

  • С точки зрения API-клиента, описанного выше, проще в использовании (нет полезной нагрузки POST, очень легко проверить / опробовать).Дружелюбие к клиенту - один из главных приоритетов для API-дизайна.
  • GET подходит лучше, потому что вы ничего не «меняете» на стороне сервера, а просто конвертируете вещи.
GET /conversions/coordinate?input=xxx&format=yyy

Мне нравится ваш подход к возврату метаданных с /conversions/formats.Это облегчает поиск форматов и делает ваши API более понятными.Соответствующие данные затем формируют возможное значение для параметра «формат» из вышеуказанного вызова.

Или вы сохраняете конверсию (которая бы предпочла метод POST с изменением состояния)?

...