gpt4 book ai didi

json - webhook JSON 有效负载是否应该进行 URL 编码?

转载 作者:行者123 更新时间:2023-12-04 07:39:13 25 4
gpt4 key购买 nike

New Relic 当前的 URL 对我们 webhook 的 JSON 有效负载进行编码。我们正确地包含了必要的 header ,但是,我想知道这是否是最佳实践 - 或者 JSON 有效负载是否应该以未编码的方式发送(或者甚至使用一些不同的编码)?

enter image description here

最佳答案

更常见的是直接在请求正文中使用 Content-Type 发送 JSON application/json 的 header 值.然而,像 New Relic 那样做这件事并不少见。 GitHub post-receive hook 有效载荷也以这种方式编码。

在某些语言/框架中,从参数中提取 JSON 数据比读取整个请求正文更容易,因为表单参数会自动解析出来并易于引用,并且在某些情况下,读取请求正文可能涉及一些更复杂的流解析。

一个例子是 PHP 用于提取整个原始请求正文的语法:

$data = file_get_contents('php://input');
var_dump(json_decode($data));

与从表单参数中提取相比:
$data = $_POST["payload"];
var_dump(json_decode($data));

对于容易暴露请求主体的框架,这不是什么大问题。这是 GitHub 文档中给出的使用 Sinatra 处理钩子(Hook)的示例:
post '/' do
push = JSON.parse(params[:payload])
"I got some JSON: #{push.inspect}"
end

如果直接传递 JSON 正文,它会是这样的:
post '/' do
push = JSON.parse(request.body.read)
"I got some JSON: #{push.inspect}"
end

这主要只是一种审美偏好,两者都没有技术优势。使用该参数,您可以灵活地在单个请求中发送多个 JSON 有效负载,或者可以选择在 JSON 之外发送其他元数据。如果这对您很重要,我建议发送 JSON 对象列表并将所有元数据包含在顶级包装器中。像这样的东西:
{
"notification_id": "akjfd8",
"events": [ ... ]
}

我个人更喜欢原始 JSON 正文,但这主要是因为它使在 RequestBin 等网站上的调试更加容易。您的屏幕截图很好地说明了 JSON 编码到表单参数中的不可读性。

关于json - webhook JSON 有效负载是否应该进行 URL 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556054/

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