【问题标题】:Returning plain-text/non-JSON data from .net core API从 .net 核心 API 返回纯文本/非 JSON 数据
【发布时间】:2020-06-05 09:54:56
【问题描述】:

注意:TL;DR 在底部 :)

在我目前的工作场所,我们的 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 重复使用,以包装基本的响应类型。

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

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

谢谢!!

【问题讨论】:

    标签: .net json angular rest .net-core


    【解决方案1】:

    您的响应标头应该有:

    "Content-Type: application/json"
    

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

    这告诉客户它应该期待什么类型。

    Angular HttpClient() 将采用纯文本 (string),您必须解析 JSON (JSON.parse()),但 HttpClient<T>() 需要 JSON,因此它可以映射到类型/接口/类。我相信这两种方法都会检查标头中的Content-Type,如果使用错误的响应类型会出错。

    【讨论】:

      【解决方案2】:

      据我了解,REST 范式的核心在于通过路径(在 URI 中)表示 资源,并通过使用 动词对它们进行操作来表示它们的状态或状态转换>(获取、发布、删除,...)。根据它的想法,REST 对这些资源的类型是无所谓的。当前的 Web API 通常使用 JSON(例如 .NET Core 中的默认序列化程序是用于 JSON,可以更改),但这只是惯例。如果是具有状态的资源,则使用任何内容类型(JSON、纯文本、XML、jpg、二进制等)完全是 RESTful。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 2018-11-17
        • 1970-01-01
        • 2023-02-05
        • 2016-06-15
        相关资源
        最近更新 更多