10
这两天真的是宅的骨头都发霉了,春困秋乏夏打盹,也是醉了。今天就简要说说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究竟是什么,应该怎么写。

另外需要注意的三个点

  1. egg会尝试对应你Controllers中定义的方法,如果没有定义相应的方法,会返回404错误
  2. 路径中的id可以使用ctx.params.id来获得
  3. 实际的路径书写如下:
show方法:
GET /posts/1

edit方法:
GET /posts/1/edit

update方法:
PUT /posts/1

Egg的文档VUE的不同,需要稍微用心一点,不然可能会像我一样看一会儿。以上。


这是你的玩具车吗
4.5k 声望798 粉丝

职业提升三部曲: