Возврат данных в виде простого текста / не JSON из основного API. net - PullRequest
0 голосов
/ 21 февраля 2020

Примечание: TL; DR внизу:)

На моем текущем рабочем месте наши API обычно возвращают JSON объектов в 90% случаев, однако некоторые проще конечные точки в настоящее время возвращают простой простой текст, например конечные точки:

  • GET ../entity/lastChange (возвращает последнее обновленное значение dateTime для определенного типа объекта) - возвращает "2019-08-02 11:26:32.341817-07:00"
  • GET ../css?platform=android (возвращает CSS контент, который используется для динамического c стиля на основе платформы) - возвращает ".my-class { color: red; }"

Я прочитал рекомендации REST (https://www.w3.org/Protocols/rfc2616/rfc2616.html ) и не смог найти никакой информации об этом. Я также прочитал несколько постов на одну и ту же тему c, но, похоже, они сосредоточены на том, можем ли мы, а не должны ли мы.

Я думаю о том, что часто это удобно получить результат в виде строки / обычного текста напрямую, однако это часто приводит к проблемам в хрупкой архитектуре или определенных клиентах (например, Angular HttpClient, ожидающий, что действительные JSON объекты будут возвращены со всех конечных точек). Я думаю о том, чтобы добавить обобщенный класс c SimplApiResult<T> { public T Result { get; set; } }, который можно повторно использовать в нескольких API для обертывания базовых c типов ответов.

TL; DR : Если простые конечные точки RESTful возвращают простой текст, где это уместно, или простые JSON структуры, например:

  • Простой текст "2019-08-02 11:26:32.341817-07:00"
  • Простой json { "result": "2019-08-02 11:26:32.341817-07:00" }

Спасибо !!

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Насколько я понимаю, парадигма REST в своей основе состоит в том, чтобы представлять Ressources их путем (в URI) и их состояниями или переходами состояний, оперируя ими с помощью Глаголов ( ПОЛУЧИТЬ, ПОСТ, УДАЛИТЬ, ...). По своей идее REST безразличен к типу этих ресурсов. Текущие веб-API часто используют JSON (например, сериализатор по умолчанию в. NET Ядро для JSON, которое можно изменить), но это просто соглашение. Полностью RESTful использовать любой тип контента (JSON, обычный текст, XML, jpg, двоичный файл, ...), если это ресурс с состоянием.

1 голос
/ 21 февраля 2020

Ваш заголовок ответа должен иметь:

"Content-Type: application/json"

или

"Content-Type: text/html; charset=UTF-8"

Это сообщает клиенту, какого типа он должен ожидать.

Angular HttpClient() будет принимать обычный текст (string), и вы должны проанализировать JSON (JSON.parse()), но HttpClient<T>() ожидает JSON, чтобы он мог отображаться в тип / интерфейс / класс. Я считаю, что оба метода проверяют Content-Type в заголовке и выдают ошибки, если используют неправильный тип ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...