这两天真的是宅的骨头都发霉了,春困秋乏夏打盹,也是醉了。今天就简要说说eggjs下Restful API的实现。主要的原因是egg的文档写的不太清楚,方便新人快速上手。话说eggjs真的是蛮好用的,通过在koa上架了一层,保证了团队以一套统一的约定开发;另外,egg本身提供很多明确的插件和中间件给你,你只管用就好了,非常的方便和容易上手。但是eggjs的文档有点小问题,它在有些需要强调的点上没有强调(它都写了只是没有强调而已)。导致我们一目十行去扫文档的时候,有时总会觉得有些莫名,Restful api的实现就是其中之一。
1. 什么是Restful API
用说人话的方式来解释一下就是:
Restful API: 为了让接口的设计的更简明易懂,人们定义的一套API命名规范
Restful API有几个特性:
- 面向资源:接口命名都是zoos、animals,而不是getAllAnimals这样的
- 使用Http动词:GET/PUT/POST/DELETE/PATCH/HEAD/OPTIONS,而不是我们日常只用的GET和POST
具体的内容可以参考相关文档,就不再多说了,马上进入正题。
参考文档:《如何给老婆解释什么是RESTful》(我晚上马上秀了波如何给爸妈解释区块链,效果棒棒的),《RESTful API 设计指南》
2. 如何在egg下实现Restful API
如果我们直接找寻文档的话,可以在eggjs文档下发现RESTful API的文档,然后看完之后知道了egg已经帮我们内部实现了一份Restful API的对应关系。
甚至路由应该这么写:
// app/router.js
module.exports = app => {
app.router.resources('topics', '/api/v2/topics', app.controller.topics);
};
但是这个controller里该怎么写?这对应的是哪个函数?反正我看完了是一脸懵逼。其实这和我本身对Restful API的了解不深入有关,但是也没有文档和我说实现啊。
其实egg在Router章节中说到了这一点,
可以看到,如果是GET, 路径只有/posts,那么对应着posts这个Controllers中的index方法,其他依次类推。
这样和《RESTful API 设计指南》中提到的规范写法是一样的:
到这里我才明白Restful API究竟是什么,应该怎么写。
另外需要注意的三个点:
- egg会尝试对应你Controllers中定义的方法,如果没有定义相应的方法,会返回404错误
- 路径中的id可以使用ctx.params.id来获得
- 实际的路径书写如下:
show方法:
GET /posts/1
edit方法:
GET /posts/1/edit
update方法:
PUT /posts/1
Egg的文档VUE的不同,需要稍微用心一点,不然可能会像我一样看一会儿。以上。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。