今天来写第四篇,给你们展现一下昨天花了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
复制代码
能够看到目前的插件还不多,我还须要继续努力哈,但愿获得你们的支持。