gpt4 book ai didi

rest - 如何使用 URI 作为 REST 资源?

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:15 26 4
gpt4 key购买 nike

我正在构建一个 RESTful API,用于在线程中检索和存储评论。

评论线程由任意 URI 标识——通常这是与评论线程相关的网页的 URL。这种设计与 Disqus 在其系统中使用的设计非常相似。

这样,在每个网页上,查询相关的评论线程不需要在客户端存储任何额外的数据——所需要的只是相关页面的规范 URL。

我当前的实现尝试通过将 URI 编码为字符串来使 URI 用作资源,如下所示:

/comments/https%3A%2F%2Fexample.org%2Ffoo%2F2345%3Ffoo%3Dbar%26baz%3Dxyz

但是,在将它发送到我的应用程序之前,请求 URI 总是被我的服务器解码为

/comments/https://example.org/foo/2345?foo=bar&baz=xyz

这不起作用,因为解码的资源名称现在有路径分隔符和查询字符串,导致我的 API 中的路由变得困惑(我的路由配置假定请求路径包含 /comments/后跟一个字符串)。

我可以对它们进行双重编码或使用 URI 编码以外的其他编码方案,但这会增加客户端的复杂性,我正在努力避免这种情况。

我有两个具体问题:

  1. 我的 URI 设计是我应该继续使用的东西,还是有更好(最好的?)实践来完成我想做的事情?

  2. 我正在通过使用 Martini“微框架”实现的 Go 流程来处理 API 请求。我应该做一些特定于 Go 或 Martini 的事情来使 URI 编码的资源名称保持编码状态吗?也许是一种向路由子系统提示资源名称不仅仅是字符串而是 URL 编码字符串的方法?

最佳答案

我不知道你的应用程序的 url 方案,但单个 % 编码值在 url 中有效代替它们代表的字符,并且应该由服务器解码,什么你看到的是我所期望的。如果您需要将 url 保留字符作为值传递并且不将它们解码为 url 的一部分,则需要对它们进行双重 % 编码。这是一种相当普遍的做法,添加到客户端和服务器的复杂性不会那么多,简短的评论就可以了。

简而言之,如果您需要传递 url 字符,对它们进行 double % 编码,就可以了。

关于rest - 如何使用 URI 作为 REST 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com