2015-11-23 3 views
3

Я разрабатываю API REST и сталкиваюсь с проблемой дизайна. У меня есть alerts, что я хотел бы, чтобы пользователь мог использовать export в одном из нескольких форматов файлов. Таким образом, мы уже вступаем в действия/команды с export, который чувствует себя как RPC, а не REST.Как создать REST API для конечной точки экспорта?

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

Так вот моя первая трещина на него:

POST /api/alerts/export?format=csv

ИЛИ

POST /api/alerts/export/csv

Настроен ли это конечная точка так, как вы бы? И правильно ли он настроен на формат файла? И если требуемый формат файла не указан, каков правильный код состояния для возврата?

Спасибо.

ответ

4

На самом деле вы должны обсудить согласование содержимого HTTP (или CONNEG) для этого. Это использует заголовок Accept (см. Спецификацию HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1), которая указывает, какой тип ожидаемого медиа для ответа.

Например, для CSV, вы могли бы иметь что-то вроде этого:

GET /api/alerts 
Accept: text/csv 

Если вы хотите, чтобы указать дополнительные подсказки (имя файла, ...), сервер может вернуть заголовок Content-Disposition (см спецификация HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1) в ответ, как описано ниже:

GET /api/alerts 
Accept: text/csv 

HTTP/1.1 200 OK 
Content-Disposition: attachment; filename="alerts.csv" 

(...) 

Надеется, что это помогает вам, Тьерри

+1

Очень интересный взгляда , Таким образом, клиент будет заполнять заголовок запроса этой информацией до отправки на сервер? –

+1

Заголовки являются частью самого запроса. Более подробную информацию см. В спецификации: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5. –

+0

Итак, используя этот дизайн, как я могу потребовать предоставления формата файла? Вернуть 400-й запрос, если значение заголовка Accept не предоставляется клиентом? –