1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 04:16:01 +00:00

api -> API

This commit is contained in:
Xargin 2018-12-24 00:32:26 +08:00
parent 789588b195
commit a12aac4e5c
2 changed files with 3 additions and 3 deletions

View File

@ -1,6 +1,6 @@
# 5.1 Web 开发简介
因为Go的`net/http`包提供了基础的路由函数组合与丰富的功能函数。所以在社区里流行一种用Go编写api不需要框架的观点;在我们看来如果你的项目的路由在个位数、URI固定且不通过URI来传递参数那么确实使用官方库也就足够。但在复杂场景下官方的http库还是有些力有不逮。例如下面这样的路由
因为Go的`net/http`包提供了基础的路由函数组合与丰富的功能函数。所以在社区里流行一种用Go编写API不需要框架的观点;在我们看来如果你的项目的路由在个位数、URI固定且不通过URI来传递参数那么确实使用官方库也就足够。但在复杂场景下官方的http库还是有些力有不逮。例如下面这样的路由
```
GET /card/:id
@ -148,7 +148,7 @@ func handleKafka(app *ApplicationContext, w http.ResponseWriter, r *http.Request
因为默认的`net/http`包中的mux不支持带参数的路由所以Burrow这个项目使用了非常蹩脚的字符串 Split 和乱七八糟的 `switch case`来达到自己的目的但实际上却让本来应该很集中的路由管理逻辑变得复杂散落在系统的各处难以维护和管理。如果读者细心地看过这些代码之后可能会发现其它的几个handler函数逻辑上较简单最复杂的也就是这个handleKafka。但实际上我们的系统总是从这样微不足道的混乱开始积少成多最终变得难以收拾。
根据我们的经验,简单地来说,只要你的路由带有参数,并且这个项目的api数目超过了10就尽量不要使用`net/http`中默认的路由。在Go开源界应用最广泛的router是httpRouter很多开源的router框架都是基于httpRouter进行一定程度的改造的成果。关于httpRouter路由的原理会在本章节的router一节中进行详细的阐释。
根据我们的经验,简单地来说,只要你的路由带有参数,并且这个项目的API数目超过了10就尽量不要使用`net/http`中默认的路由。在Go开源界应用最广泛的router是httpRouter很多开源的router框架都是基于httpRouter进行一定程度的改造的成果。关于httpRouter路由的原理会在本章节的router一节中进行详细的阐释。
再来回顾一下文章开头说的开源界有这么几种框架第一种是对httpRouter进行简单的封装然后提供定制的middleware和一些简单的小工具集成比如gin主打轻量易学高性能。第二种是借鉴其它语言的编程风格的一些MVC类框架例如beego方便从其它语言迁移过来的程序员快速上手快速开发。还有一些框架功能更为强大除了数据库schema设计大部分代码直接生成例如goa。不管哪种框架适合开发者背景的就是最好的。

View File

@ -30,7 +30,7 @@ PUT /user/starred/:owner/:repo
DELETE /user/starred/:owner/:repo
```
相信聪明的你已经猜出来了这是github官方文档中挑出来的几个api设计。RESTful风格的API重度依赖请求路径。会将很多参数放在请求URI中。除此之外还会使用很多并不那么常见的HTTP状态码不过本节只讨论路由所以先略过不谈。
相信聪明的你已经猜出来了这是github官方文档中挑出来的几个API设计。RESTful风格的API重度依赖请求路径。会将很多参数放在请求URI中。除此之外还会使用很多并不那么常见的HTTP状态码不过本节只讨论路由所以先略过不谈。
如果我们的系统也想要这样的URI设计使用标准库的mux显然就力不从心了。