今天來寫第四篇,給你們展現一下昨天花了4個小時新寫的一個 Semo
插件,同時預告下一篇給你們講講 Semo
的 REPL 環境ios
Semo 因爲自己不提供任何直接的功能,只是一個命令行開發的規範和約束,因此,若是想獲得若干功能,都須要基於 Semo
來擴展。今天這個插件就給 Semo
提供了網絡訪問的能力,基於流行的 axios
npm 包。npm
可能你會想,我想用的時候就直接用 axios
了,爲何要用這個插件呢,問得好,固然能夠直接用 axios
,可是這裏還有一些額外的好處,也就是帶了一個相似於 curl
的命令行工具。json
下面咱們來講說安裝和用法axios
假設你尚未安裝 Semo
,那就一塊兒裝了吧~api
npm i -g @semo/cli semo-plugin-api
semo api help
複製代碼
執行 help
能夠看到一大堆參數,不要被嚇到,其實平時基本都用不着。bash
這裏,咱們以網上公開的 Fake Rest Server 爲例,給你們演示網絡
用於默認就是 GET,因此,不須要加額外的參數。curl
$ semo api https://jsonplaceholder.typicode.com/posts/1
{
userId: 1,
id: 1,
title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}
複製代碼
這裏能夠看到,用了 -X
來表示請求動詞,也能夠用 --method
,同時咱們用 --data
來表示請求體,注意這裏能夠用一行命令構造一個對象結構。ide
$ semo api -X POST https://jsonplaceholder.typicode.com/posts --data.title=foo --data.body=bar --userId=1
{ title: 'foo', body: 'bar', id: 101 }
複製代碼
同理,PUT 就是替換,其他和 POST 相似,注意這裏用了小寫的 put,意思是這裏動詞不區分大小寫。函數
$ semo api -X put https://jsonplaceholder.typicode.com/posts/1 --data.title=foo --data.body=bar --userId=1 --id=1
{ title: 'foo', body: 'bar', id: 1 }
複製代碼
PATCH 用來替換其中的一部分
$ semo api -X patch https://jsonplaceholder.typicode.com/posts/1 --data.title=foo
{
userId: 1,
id: 1,
title: 'foo',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}
複製代碼
當 DELETE
時,Rest Server 並無給我返回內容,只是沒報錯
semo api -X delete https://jsonplaceholder.typicode.com/posts/1
{ status: 200, statusText: 'OK' }
複製代碼
這兩個也是能夠發出,看不到什麼明顯的響應。
$ semo api -X head https://jsonplaceholder.typicode.com/posts/1
{ status: 200, statusText: 'OK' }
$ semo api -X options https://jsonplaceholder.typicode.com/posts/1
{
status: 204,
statusText: 'No Content',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET,HEAD,PUT,PATCH,POST,DELETE'
}
複製代碼
我對這兩種請求的響應內容不是很滿意,後面可能還要完善一下。
--headers
其實支持不少參數,可是大部分真的不是很經常使用,若是須要了解的話,能夠去看 axios
包的說明。
semo api https://jsonplaceholder.typicode.com/posts/1 -H 'X-A:B'
semo api https://jsonplaceholder.typicode.com/posts/1 -H.'X-A'=B
複製代碼
很明顯第二種風格很詭異,建議仍是用第一種風格。
參數那麼多,每次都寫太累了,能夠弄成 js 或者 json 文件
semo api --file api.js
semo api --file api.json
複製代碼
這裏原來的 -X
和 URL
可寫可不寫,能夠在文件裏寫,還有就是若是是 js,模塊能夠返回 literal object
或者函數,或者 Promise。
固然,就算是不加 --color
,某些終端也是給必定的着色的,這裏若是加了 --color
參數,則會用 Semo
的 Utils.log
來着色。
semo api https://jsonplaceholder.typicode.com/posts/1 --color
複製代碼
若是你要測試的接口訪問不到怎麼辦呢,這裏提供了參數支持
semo api http://myip.ipip.net
semo api http://myip.ipip.net --ss
semo api http://myip.ipip.net --socks-proxy=socks://127.0.0.1:1080
複製代碼
能夠看到加不加 --ss
參數,返回結果是不一樣的,另外,若是剛好你的端口也開在 1080,就能夠不用輸入這麼長來執行具體的端口了。
能夠用 debug
的機制來查看隱藏的調試信息:
DEBUG=semo-* semo api https://jsonplaceholder.typicode.com/posts/1
複製代碼
就是不打算全局或者項目內安裝這個插件還想用
semo run api -- https://jsonplaceholder.typicode.com/posts/1
複製代碼
Semo run
會自動幫你把插件下載到另外一個地方,只有用的時候纔會生效,平時 semo help
是看不到的。
Semo
但想試玩一下這個插件這種方式每次都要隱式的下載一下 Semo
,其實挺慢的,僅供試玩。
npx @semo/cli run api -- http://myip.ipip.net
複製代碼
import { api } from 'semo-plugin-api'
API = api('debug-prefix')
await API.get(url, config)
await API.post(url, data, config)
複製代碼
或者
const { api } = await Utils.invokeHook('component')
複製代碼
這又是一個在幾個小時內完成的一個插件,核心仍是用的別人的,展現的是 Semo
封裝的能力和統一的風格,並且實際上這樣的一個小插件也將做爲後面整合起來的稍大項目的基礎模塊。
歡迎你們試用,討論,有什麼問題能夠提 issues 或者參與共建,個人願景目標是造成一個小社區,你們一塊兒共建出許多插件,有的是爲了完成更大的項目的基礎模塊,有的多是組織內的私有模塊,還有的可能僅僅是爲了好玩。
semo run plugin -- --remote
複製代碼
能夠看到目前的插件還不多,我還須要繼續努力哈,但願獲得你們的支持。