在我目前的工作场所,我们通常让我们的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" }
2条答案
按热度按时间olmpazwi1#
您的响应标头应该具有:
或
这告诉客户端它应该期待什么类型。
Angular
HttpClient()
将接受纯文本(string
),并且您必须解析JSON(JSON.parse()
),但HttpClient<T>()
需要JSON,因此它可以Map到Type/Interface/Class。我相信这两种方法都会检查头中的Content-Type
,如果使用了错误的响应类型,给予。pgccezyw2#
就我的理解而言,REST范例的核心是通过它们的路径(在URI中)表示 * 资源 *,以及通过使用 * 动词 *(GET,POST,DELETE,...)对它们进行操作来表示它们的状态或状态转换。根据REST的想法,它不关心这些资源的类型是什么。当前的Web API通常使用JSON(就像.NET Core中的默认序列化程序是针对JSON的,可以更改),但这只是惯例。如果它是一个有状态的资源,那么使用任何内容类型(JSON、纯文本、XML、jpg、二进制等)都是完全RESTful的。