Должен ли RESTful API возвращать файлы или просто местоположение

12

Это озадачивало меня некоторое время.

Например, у нас есть REST API, который обеспечивает базовый контент для системы, потребляя и производя JSON. В этой конечной точке он создает URL-адрес для изображения и описания и находится следующим образом: // localhost / myApi / pictures / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

Теперь OUR_URL должен указывать на местоположение в API, например, // localhost / myApi / files / pictures / 1, которое возвращает JPG (приложение, стоящее за API, считывает физическое содержимое файла и затем передает его обратно клиенту ). Это, очевидно, отличается от остальной части API, который генерирует ответы JSON, и это будет связано с чтением и потоковой передачей реального файла.

В качестве альтернативы OUR_URL должен указывать на URL-адрес вне области действия службы REST, поэтому //localhost/files/pictures/1.jpg, где он читает файл напрямую.

Итак, вопрос:

Должен ли RESTful API возвращать файлы или просто местоположение?

Сумасшедший Дино
источник
1
Вы понимаете, что общее описание того, что такое REST, равнозначно «клиенты отправляют запросы на URL, а сервер возвращает данные», верно? Вся идея в том, что REST очень свободно определен и может быть адаптирован практически к любой схеме поиска на основе URL.

Ответы:

17

Служба RESTful должна предоставлять ресурсы пользователям API. Ресурсы могут иметь различные форматы, которые варьируются от JSON или XML до JPEG и HTML.

Нет даже требования или даже ожидания, что один API обслуживает только ресурсы одного формата. Нет ничего плохого в том, чтобы подавать документ JSON по URI /myApi/pictures/1и файл JPEG из URI /myApi/files/pictures/1.
В более экстремальном случае возможно даже предоставить описание JSON и файл JPEG с одного и того же URL-адреса в зависимости от формата, который запрашивает запрашивающая сторона.

Барт ван Инген Шенау
источник
7

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

В противном случае возврат простого старого URI и передача его в выделенный CDN имеет много преимуществ в отношении предоставления, простоты и масштабируемости - при условии, что это все, что вам нужно сделать.

Telastyn
источник
Аутентичный аспект - это очень хороший момент, который я никогда не рассматривал.
Сумасшедший Дино