我们如何在 Rest 端点 URL 中获取不同的查询参数?

时间:2021-07-29 15:22:59

标签: api rest mule-esb

例如,如果我想为所有请求使用一个端点,那么设计 API 端点的最佳实践是什么?

例如,不是有三个不同的端点

http://localhost:8080/api/reports/subreport1?param1=1¶m2=2¶m3=3

http://localhost:8080/api/reports/subreport2?param1=1

http://localhost:8080/api/reports/subreport3

我想要一个端点

http://localhost:8080/api/reports/{subreport}/{根据要请求的报告类型发送不同的查询参数}

我的问题是,是在 url 中传递不同的查询参数还是以 json 格式在 GET 方法体中传递它更好?如果在查询参数中传入,我该如何解析并路由到正确的 API 实现?

谢谢, 阿努

1 个答案:

答案 0 :(得分:0)

<块引用>

我的问题是,在 url 中传递不同的查询参数更好还是在 GET 方法体中以 json 格式传递?

这很容易回答:GET + 方法体是错误的,无论格式如何。这里的问题是 GET 请求的方法体有 no defined semantics;您不能保证通用组件会礼貌地将数据一直传递到源服务器。此外,尝试根据 GET 主体区分不同的资源会使您的缓存变得一团糟(出于完全相同的原因 - 缓存不会知道主体包含识别信息)。

(在某些时候,其中一些问题将得到解决;HTTPWG 接受了关于 safe request with a significant payload 的提案——这还不是一个标准,但是当困难的部分已经解决后,它有望成为一个标准解决了。​​)

如果您打算使用 GET,那么您需要将信息编码到请求目标中,最好以标准化方式编码。一个简单的答案是按照 Web 的方式进行操作 - application/x-www-form-urlencoded 键/值对。例如,考虑一个带有 textarea 控件的 Web 搜索表单,您在服务器上解析自由文本以恢复查询。

<块引用>

如何解析它并路由到正确的 API 实现?

通常的答案是您使用方便的 HTTP 库/框架为您解析 URL,从中提取自由文本值,然后应用您自己的函数来读取数据并分支到正确的处理程序。

没有魔法 - 我们通常可以依靠通用代码来粗略处理常见情况,但如果我们做了一些不寻常的事情,那么我们最终会滚动我们自己的逻辑来弥合剩余的差距。

相关问题