httpie + jq
前者是curl的增强版,后者用来处理httpie返回的json结果。
http -b api.newfairs.com/Fair/_search query:='{ "match": { "nameZHCN": "中国上海国际栅栏护栏展览会暨研讨会" } }' size=5 fields:='["nameZHCN"]'
http -b api.newfairs.com/Fair/_search query:='{ "match": { "nameZHCN": "中国上海国际栅栏护栏展览会暨研讨会" } }' size=5 | jq '.hits.total'
http -b api.newfairs.com/Fair/_search query:='{ "match": { "nameZHCN": "中国上海国际栅栏护栏展览会暨研讨会" } }' size=5 | jq '.hits.hits[]._source.nameZHCN'
http -b api.newfairs.com/Fair/_search query:='{ "query": { "match": { "_id": "Ao3Ati9dvWBerBrn8" } } }' | jq '.hits.hits[]._source.nameZHCN'
http -b POST http://api.newfairs.com/Fair/_search query:='{"query":{"bool":{"must":[{"query_string":{"query":"五金机械"}}]}}}'|jq '.hits.hits[]._source.recurrence[].timeStart'
-b 代表只显示response的body,不显示head,以方便后续jq进行下一步处理,
中括号代表array,例如jq '.hits.hits[0]'
表示只显示第一个结果,
hits[]代表返回数组里的所有结果。
这二者结合fzf,可以实现Postman/Insomnia这类GUI工具的功能。
Insomnia
Insomnia: Chrome App.
Pros
-
Request和Response窗口是左右排列的,且宽度可以调节;
-
分级管理Request: Workspace -> Group -> Request, 只能同时打开一个Workspace,比Postman更整洁;
-
良好的快捷键支持,request body和环境变量编辑窗口中可以使用vi编辑模式;
-
可以为每个Workspace定义环境变量,然后在url中使用这些环境变量,见下面的演示;
-
按名称搜索request: 默认快捷键Ctrl-P;
Cons
- 没有云同步,只能本地import/export;
Postman
Postman: Chrome App.
Pros
-
分级管理request: Collection -> Folder -> Request,可以方便地搜索; Collection实际就是高一级的Folder,当request数量多时,request面板会比较凌乱;
-
可以同步到云端,在不同机器上方便地同步;
Cons
Request和Response窗口是上下排列的,当调试Post方法时, 打开的Body窗体基本占满了整个屏幕,而且是最小高度,不能再减小, 导致每次看response内容都要使用滚轮,非常不方便。
Discussion
Insomnia的环境变量
例如定义下面的环境变量:
{
"api_url": "http://api.newfairs.com",
"inner_url": "http://192.168.100.24:9200/"
}
在request的url栏里可以这样定义url: {{api_url}}/Fair/_search
,
点击request名称后面的三角图标并选择"Export as cURL",可以看到url被替换成了
http://api.newfairs.com/Fair/_search
.
其他类似工具
Firefox插件:Poster, RESTED, REST Easy, RESTClient. 前三者都不具备多Request管理功能,无法保存多个Request. RESTClient可以定义favorite,但没有单独的窗体,查看不方便。