Terraform Mastercard/restapi提供程序如何配置json_data参数传参
解决方法
这个报错是因为你对接的接口不接受裸JSON格式的请求体,强制要求所有业务JSON内容必须放在名为json_data的请求参数中传递。你当前配置直接把业务JSON作为整个请求体发送,还全局设置了Content-Type: application/json,接口读不到json_data参数自然会抛错。
按以下两点调整配置即可:
- 替换provider块里的
Content-Type请求头,POST表单参数需要使用application/x-www-form-urlencoded类型,不要用JSON类型头 - 调整
restapi_object资源的data字段,将原本的业务JSON作为json_data参数的值传入,直接用Terraform内置的jsonencode和urlencode函数处理内容即可,不用手动转义引号、特殊字符,不容易出语法错。
修改后的可参考配置如下:
terraform { required_providers { restapi = { source = "Mastercard/restapi" version = "1.17.0" } } } provider "restapi" { uri = var.uri debug = true write_returns_object = true username = var.auth_user password = var.auth_passwd headers = { "Content-Type" = "application/x-www-form-urlencoded" } create_method = "POST" } resource "restapi_object" "post_request" { path = "/webservices/rest.php?version=1.2" data = "json_data=${urlencode(jsonencode({ operation = "core/create" # 在此处补全你之前省略的其他业务JSON字段,按HCL键值对格式书写即可,函数会自动完成序列化转义 }))}" }
补充说明:如果你对接的接口要求json_data放在URL查询参数里而非POST表单中,只需要把Content-Type改回application/json,再把json_data=xxx的参数串拼接到path的查询部分即可。市面上绝大多数用rest.php做入口的老式接口都是要求POST表单传该参数,上面的配置可以直接适配。
内容的提问来源于stack exchange,提问作者AlRal
相关产品推荐
相关产品推荐

