convertigo - 使用 Convertigo 发送复杂 json 请求的最佳方法
问题描述
我有一个复杂的 json 请求,我想将其发布到 api,但我在 Convertigo Studio 中找不到执行此操作的正确方法。谁能告诉我最好的方法来做到这一点?
这是我通过 curl 发送的请求,它给了我结果。这些结果将被前端用于显示数据。
curl -k -H "Accept: application/json" --compressed -XPOST https://myserverurl/api/search -d @- << EOF
{
"api-key":"somekey",
"usage":"someusage",
"criteria":{
"timestamp":{"from-to":{"date-pattern":"yyyy/MM/dd-HHmmss","from":"2019/07/28-000000","to":"2019/08/27-235959"}},
"timestamp-field":"timestamp",
"metric":"*",
"filter":{
"and":
[
{"eq":{"attribute":"type","value":"sometype"}},
{"simple-query":{"query":"_exists_:city"}},
{"neq":{"attribute":"status","value":"1"}}
]
}
},
"info":"someinfo",
"size":10000,
"mode":"last-hits",
"format":{"tabular":{"columns":["col1", "col2","col3"],
"last-hits-columns":["name"],"order-by":[{"name":"name","direction":"ASC"}]},
"timestamp":{"date-pattern":"dd/MM/yyyy HH:mm:ss"}},
"index":"someindex",
"last-hits-count":"1"
}
EOF
我现在想使用适当的连接器和事务将其转换为 Convertigo 方法,但到目前为止我遇到了困难。任何帮助表示赞赏。
更新:所以我设法联系了 API,即通过实现 HTTP_Connector 和 HTTP_Transaction 来复制 curl 的第一部分。服务器正在以预期的方式回答。
现在我不能做的是发布 json 字符串。我已经尝试实现一个 http_single_variable ,它的默认值是那个 json 字符串,但它不起作用,我收到以下错误:
HTTP result {ContentType: application/json, Length: 277}
{"error":{"request":"http://localhost:8550/api/search","message":"Unexpected character ('H' (code 72)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: java.io.InputStreamReader@6c195833; line: 1, column: 2]","target":"/search"}}
该错误似乎来自标头,该标头已定义为 Accept, application/json. 当我删除它时,我从服务器收到 HTTP 500 错误。
解决方案
要在 Convertigo 请求中发布 JSON 正文,您必须将变量“ __body ”添加到您的事务中:
如果您的 API 返回 JSON 响应,您应该使用JSON_HTTP_transaction而不是HTTP_Transaction事务。
将“ HTTP verb ”属性事务设置为POST,将“ HTTP headers ”属性设置为“ Content-type, application/json ”。
__body 变量的值由Sequence_JS步骤按顺序设置,如下所示:
var data = {
"param1": "value1",
"param2": "value2",
...
};
然后,使用jElement步骤将“数据”转换为 JSON 字符串源:
JSON.stringify(data)
在“表达式”属性中。
下一步是调用您的交易。在 __body Source 中指向 jElement 文本。
这是 Convertigo (7.5.7+) 示例的链接: useBody.car
希望有帮助。
推荐阅读
- api - 使用 Axios 请求发布 API 错误代码 400
- python - Python - 多次更新 Jinja2 模板然后渲染它
- java - 如何获得 Firebase 令牌?
- sql - SQL Server 中的透视 varchar 列?
- xtext - 如何禁用打开和关闭大括号内容辅助
- javascript - 如何卸载反应组件内部使用的webcomponent?
- nginx - 如何在web服务之前检查入口数据而不慢?
- sonarqube - SonarQube 限制执行的堆大小
- javascript - 如何仅调用最近命中的 api 并在 react-native 中中止先前调用的 api 的会话?
- reactjs - react context vs redux vs hooks,应该考虑哪一个以及每个的不同之处