从.net核心API返回纯文本/非JSON数据

t5zmwmid  于 2023-06-07  发布在  .NET
关注(0)|答案(2)|浏览(140)

在我目前的工作场所,我们通常让我们的API在90%的情况下返回JSON对象,但是某些更简单的端点目前返回简单的纯文本,示例端点是:

  • GET ../entity/lastChange(返回特定实体类型的最后更新的日期时间)-返回"2019-08-02 11:26:32.341817-07:00"
  • GET ../css?platform=android(返回用于基于平台的动态样式的CSS内容)-返回".my-class { color: red; }"

我读过REST指南(https://www.w3.org/Protocols/rfc2616/rfc2616.html),但找不到任何关于这方面的信息。我也读了一些关于同一主题的帖子,但这些帖子似乎集中在我们是否可以,而不是我们是否应该。
我想的是,通常直接以字符串/纯文本的形式获得结果是很方便的,但是这通常会导致脆弱架构或某些客户端的问题(例如:Angular HttpClient期望从所有端点返回有效的JSON对象)。我所考虑的是添加一个通用的SimplApiResult<T> { public T Result { get; set; } }类,可以跨多个API重用它来 Package 基本的响应类型。

摘要

简单的RESTful端点应该在适当的地方返回纯文本还是简单的JSON结构,例如:

  • 纯文本"2019-08-02 11:26:32.341817-07:00"
  • 简单的json { "result": "2019-08-02 11:26:32.341817-07:00" }
olmpazwi

olmpazwi1#

您的响应标头应该具有:

"Content-Type: application/json"

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

这告诉客户端它应该期待什么类型。
Angular HttpClient()将接受纯文本(string),并且您必须解析JSON(JSON.parse()),但HttpClient<T>()需要JSON,因此它可以Map到Type/Interface/Class。我相信这两种方法都会检查头中的Content-Type,如果使用了错误的响应类型,给予。

pgccezyw

pgccezyw2#

就我的理解而言,REST范例的核心是通过它们的路径(在URI中)表示 * 资源 *,以及通过使用 * 动词 *(GET,POST,DELETE,...)对它们进行操作来表示它们的状态或状态转换。根据REST的想法,它不关心这些资源的类型是什么。当前的Web API通常使用JSON(就像.NET Core中的默认序列化程序是针对JSON的,可以更改),但这只是惯例。如果它是一个有状态的资源,那么使用任何内容类型(JSON、纯文本、XML、jpg、二进制等)都是完全RESTful的。

相关问题