Semo 系列文章之四:插件 semo-plugin-api

以前已經寫了3篇 Semo 相關的文章,給你們展現了 Semo 部分的能力,分別是:

今天來寫第四篇,給你們展現一下昨天花了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 請求

用於默認就是 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'
}
複製代碼

POST 請求

這裏能夠看到,用了 -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 請求

同理,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 請求

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 請求

DELETE 時,Rest Server 並無給我返回內容,只是沒報錯

semo api -X delete https://jsonplaceholder.typicode.com/posts/1 
{ status: 200, statusText: 'OK' }
複製代碼

HEAD 請求和 OPTIONS 請求

這兩個也是能夠發出,看不到什麼明顯的響應。

$ 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
複製代碼

這裏原來的 -XURL 可寫可不寫,能夠在文件裏寫,還有就是若是是 js,模塊能夠返回 literal object 或者函數,或者 Promise。

給 json 響應加點顏色

固然,就算是不加 --color,某些終端也是給必定的着色的,這裏若是加了 --color 參數,則會用 SemoUtils.log 來着色。

semo api https://jsonplaceholder.typicode.com/posts/1 --color
複製代碼

訪問 Proxy

若是你要測試的接口訪問不到怎麼辦呢,這裏提供了參數支持

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
複製代碼

能夠看到目前的插件還不多,我還須要繼續努力哈,但願獲得你們的支持。

相關文章
相關標籤/搜索