我现在面临通过卷曲复杂的http请求的问题。 我建立REST API使用的NodeJS,使用快速路由器和Multer中间件处理多个身体数据和文件。
我的端点路由127.0.0.1/api/postData预计:与字段JSON数据,其中之一是JSON对象(我具有嵌套猫鼬模式)和2幅命名为图像(PNG / JPG)的阵列。
我需要通过卷曲到发送请求后用以下的5对象数据结构:
name String
description String
usersArray Array of json objects like: [{"id": "123"}, {"id": "456}]
imgIcon Png/Image providing /path/to/imageIcon.png
imgHeader Png/Image providing /path/to/imageHeader.png
我读过很多关于计算器线程的,但所有的人都回答特定问题奇异,一个线程约卷曲后的图像,另一卷曲后阵列,但并不完全。
我试过REST API测试工具,如邮递员,DHC(谷歌浏览器),并有一切都很好,除了arraysArray场我喜欢用的字段:
usersArray [0] { “ID”: “123”} usersArray [1] { “ID”: “456”}
但验证没有通过辩论,因为JSON对象值将被解析莫名其妙不正确。
所以我决定把一切都放在卷曲脚本。
我试着写我在下面的方式卷曲的要求:
#!/bin/bash
curl -H 'Content-Type: application/json'
-H 'Accept: application/json' -X POST
-F "name=Foo Name Test"
--data '[{"id": "a667cc8f-42cf-438a-b9d8-7515438a9ac1"}, {"id": "7c7960fb-eeb9-4cbf-9838-bcb6bc9a3878"}]'
-F "description=Super Bar"
-F "imgIcon=@/home/username/Pictures/imgIcon.png"
-F "imgHeader=@/home/username/Pictures/imgHeader.png" http://127.0.0.1:7777/api/postData
当我运行我的脚本cUrl作者在bash ./postData
我得到这个:$警告:你只能选择一个HTTP请求!
你可以帮助:
1)任何想法如何写在卷曲这样一个复杂的HTTP请求REST
2)或用工具建议(如DHC,邮差)来解决这个复杂的http请求。
3)或任何想法如何编写一个带request.js节点HTTP请求库的帮助这个请求。
谢谢大家提前对所有的答案,想法和创意!
问候,JJ
您可以尝试邮差或Google Chrome分机应用的REST API测试DHC。 但是,你应该使用,而不是使用JSON对象作为一个值,可以验证过程中造成问题多维数组。
在DHC试试这个:
|FIELD| |VALUE|
name 'Some name'
description 'Some description'
usersArray[0][id] 89a7df9
usersArray[1][id] dskf28f
imgIcon (select type of field "file" and upload image)
imgHeader (select type of field "file" and upload image)
它的工作原理上面的方法是:usersArray [0] [ID]指定在位置0的对象{}与您在值部sepcify键“id”和值多维数组和场所。
所以usersArray [0] [ID] “123” 创建[{ “ID”:123}] usersArray [1] [ID] “456” 增加了另一个元件阵列,所以阵列变为:[{ “ID”: “123” },{ “id为”: “456”}]
有时你会想使用shell +卷曲,使RESTAPI接电话,你可能要复杂的JSON传递数据。 而如果你想使用的变量并创建在执行期间的数据,你可能最终会使用大量的转义字符()和代码看起来丑陋。 我在做同样的事情也时,Windows PowerShell有字典转换方法|关联数组JSON这确实有助于在该领域,但看起来类似的东西,但没有发现任何东西。 所以这是一个示例代码,将有助于:
#!/bin/Bash
# Author Jayan@localhost.com
## Variable Declaration
email="jayan@localhost.com"
password="VerySecurePassword"
department="Department X"
## Create JSON using variables in Bash
creds="{^email^:^${email}^, ^password^:^${password}^}"
department="{^department^:^${department}^}"
authdata_crippled="{^Authenticate^:[${creds},${department}]}"
# Replace ^ with "
authdata_json_for_RestAPI_Call=$(echo ${authdata_crippled}|tr '^' '"')
# Testing syntax
# Get "jq": yum install jq OR https://stedolan.github.io/jq/
echo ${authdata_json_for_RestAPI_Call} | jq .
# Then you make API call using curl
# Eg:
curl http://hostname:port/right/endpoint/for/api/Authenticate -X POST --header "Content-Type:application/json" -d ${authdata_json_for_RestAPI_Call} --cookie-jar cookie.data
希望这可以帮助别人。