URL Restful API для получения данных json для разных форматов файлов

Я создаю URL-адреса API для отдыха, чтобы получать данные о продуктах. Так что я,

POST /products
GET /products
GET /products/{:id}
DELETE /products/{:id}

Одним из требований является предоставление конечных точек для получения данных о продукте в формате JSON для экспорта в другой формат файла, CSV и PDF. Его вызовет другой сервис (экспортный сервис).

Пример ответа:

для PDF

{ 
  products_pdf: {
     title: 'Products',
     sub_title: 'as per May 20 2018',
     products: [
       {
          name: 'product A', 
       },
       {
          name: 'product B', 
       }
     ]
  }
}

для CSV более простой ответ, чем PDF. В зависимости от требований оба ответа не могут быть предоставлены в одном ответе.

{
  products_csv: [
    {
      name: 'product A',
    },
    {
      name: 'product B'
    } 
  ]
}

Какова правильная конечная точка URL-адреса для него?

я думаю о том, как

GET /products/exports/{:file_format}
GET /products/exports/csv
GET /products/exports/pdf

person deerawan    schedule 13.05.2018    source источник


Ответы (3)


Для меня формат данных является необязательным и поэтому не должен определять конечную точку ресурса. Наиболее логичным решением для меня было бы иметь формат по умолчанию и использовать параметр строки запроса для переопределения, например.

GET /products?format={pdf|csv}
person James    schedule 13.05.2018
comment
Как вы пишете это внутри кода над определением метода конечной точки? И какую аннотацию вам нужно добавить в поля класса объекта значения для учета CSV? - person C96; 28.02.2021

Старый Google Finance API предоставлял исторические данные в различных форматах. Эти форматы можно запрашивать с помощью различных аргументов параметра строки запроса output.

Например:

http://www.google.com/finance/historical?q=GOOGL&output=csv

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

person Sean Pianka    schedule 13.05.2018

ИМО, наличие слова exports в URL выглядит не очень хорошо. Конечная точка может иметь тип ответа в расширении URL.

Ex :

/products.json
/products.xml
/products.pdf
/products.csv

Если вам не нравится этот шаблон, вы вполне можете использовать Принять HTTP-заголовок.

person Deva Gerald    schedule 14.05.2018