当前位置: 首页 > 知识库问答 >
问题:

描述请求和返回数据的REST API响应

高才
2023-03-14

在实现之前,我正在考虑生成REST API的JSON响应的结构。我在SO上浏览了许多问答,阅读了许多文章、推荐和伪标准。

要求

  1. 通知客户一些有用的元信息-HTTP状态代码等。
  2. 分页和过滤信息-偏移,限制和过滤查询(API客户端知道影响结果的所有参数)。
  3. 关于数据采集的信息-集合中的总记录计数和返回项的数量。API客户端然后能够创建分页。
  4. 上一页和下一页的链接(只是考虑,不确定这是否适用于API客户端,但许多REST API链接部分使用-例如PayPal)

回答

这是我返回搜索结果数据结构的第一稿:

{
    "meta": {
        "status_code": 200,
        "success": true,
        "server_time": "2017-06-29T15:24:40+0200"
    },
    "request": {
        "offset": 5,
        "limit": 5,
        "query": [
            "foo",
            "bar"
        ]
    },
    "response": {
        "count": 5,
        "total_count": 754,
        "data": [
            {
                "id": "88b60cc6-70bc-4b1a-8f26-c919355d47d3",
                "name": "Name of entity 1"
            },
            {
                "id": "2f4ccda5-11bc-4ef7-b663-30c506f5118c",
                "name": "Name of entity 2"
            },
            {
                "id": "1333f2fe-a958-474e-9a82-8b343fda3aff",
                "name": "Name of entity 3"
            },
            {
                "id": "f5187143-f3b8-412b-a416-1e3a5830baee",
                "name": "Name of entity 4"
            },
            {
                "id": "2dd17750-bbdf-460a-abec-1f74e1170726",
                "name": "Name of entity 5"
            }
        ]
    },
    "links": {
        "previous": {
            "href": "http:\/\/api.example.com\/envelopes?offset=0&limit=5",
            "rel": "previous",
            "method": "GET"
        },
        "self": {
            "href": "http:\/\/api.example.com\/envelopes?offset=5&limit=5",
            "rel": "self",
            "method": "GET"
        },
        "next": {
            "href": "http:\/\/api.example.com\/envelopes?offset=10&limit=5",
            "rel": "next",
            "method": "GET"
        }
    }
}

我不想用“意见问题”来讨论最合适的JSON结构。我在回复中看到了很多关于信封的意见,有些是它推荐的服务/标准,有些不是。

问题:

  1. 在这个结构中返回结果好吗

共有1个答案

阴福
2023-03-14

意见问题很难回答,但我会努力的。

首先,你的问题不应该针对社区,而应该针对客户本身。没有什么比这种反馈更能澄清关于缺失/必要值的假设了。

结构本身已经足够好了,至少是草图。在设计响应时,您需要记住,您基本上是在锁定自己,因为客户不喜欢API中的根本性更改。只有很多增量“请在此处再添加一个字段”。你在思考元字段、分页和分离实际响应方面做得很好,但不要认为你能预测一切。你不会的。也许可以找一些类似HAL或JSON集合的东西。至少是一个灵感。

最终,API的设计是渐进式的,主要是客户机驱动的过程。跟你的客户谈谈。

 类似资料:
  • 尝试使用PUT请求更新数据。但是,数据没有更新和返回邮递员中的以前的数据。 邮递员提出要求: 邮递员回复: 我也尝试过使用findByIdAndUpdate。没有得到结果。任何帮助都将不胜感激。 控制器: 路由器:

  • 我见过龙卷风文档和示例,其中self.write方法被广泛用于在超文本标记语言上呈现一些值,其中POST请求在处理程序中运行。但是我找不到关于如何将响应返回给客户的清晰信息。 例如,我正在从我的客户端调用Tornado服务器上的POST请求。接受post请求的代码为: 有了这个,我可以找到cbtp的值,有了,我可以用HTML打印它。但是,相反,我想以JSON格式将这个值返回给客户机,比如我想知道如

  • 我需要编写一个 rest 服务,它接受 XML/JSON 作为输入(POST 方法)和 XML/JSON 作为输出(基于输入格式)。我尝试了以下方法来实现这一目标,但没有帮助。终结点方法同时接受 XML/JSON,但在响应时,它始终根据 @RequestMapping -produces 中指定的顺序提供 JSON 或 XML。任何帮助将不胜感激。 我的endpoint方法: POJO班:学生.j

  • 我正在尝试对远程服务器进行api调用,最初,我遇到以下错误:

  • 我正在尝试从JavaScript应用程序向另一个应用程序中的endpoint进行API调用。 当我调用endpoint时,我得到了状态代码和消息,但我无法以任何方式访问响应体。我已经尝试了不同的方法来获取数据,但似乎没有一种方法对我有效。 在方法“someAction”中,我想使用来自API调用的响应/结果中的数据。我在代码中添加了单个日志行打印的输出。 如何在定义“result.status/m

  • 问题内容: 我正在使用Node的模块发出 HTTP 请求,但是在上,返回的块似乎并不满足完整的请求响应。这是我的代码: 有没有办法在结束请求之前等待完整的输出?难道我做错了什么?谢谢! 问题答案: 您还应该收听“结束”事件