Go语言教程第十集 如何玩转Restful和RPC网络编程( 四 )


根据API 规范,实现新增使用的是 POST 方法,并且 URL 的格式为 :8080/users ,向这个 URL 发送数据,就可以新增一个用户,然后返回创建的用户信息 。
现在我使用 Gin 框架实现新增一个用户,示例代码如下:
func main() {//省略没有改动的代码r.POST("/users", createUser)}func createUser(c *gin.Context) {name := c.DefaultPostForm("name", "")if name != "" {u := User{ID: len(users) + 1, Name: name}users = append(users, u)c.JSON(http.StatusCreated,u)} else {c.JSON(http.StatusOK, gin.H{"message": "请输入用户名称",})}}
以上新增用户的主要逻辑是获取客户端上传的 name 值,然后生成一个 User 用户,最后把它存储到 users 集合中,达到新增用户的目的 。
在这个示例中,使用 POST 方法来新增用户,所以只能通过 POST 方法才能新增用户成功 。
现在运行这个示例,然后通过如下命令发送一个新增用户的请求,查看结果:
? curl -X POST -d 'name=飞雪' http://localhost:8080/users{"ID":4,"Name":"飞雪"}
可以看到新增用户成功,并且返回了新增的用户,还有分配的 ID 。
总结
Go 语言已经给我们提供了比较强大的 SDK,让我们可以很容易地开发网络服务的应用,而借助第三方的 Web 框架,可以让这件事情更容易、更高效 。比如这篇文章介绍的 Gin 框架,就可以很容易让我们开发出API,更多关于 Gin 框架的使用可以参考Gin 实战系列文章 。
在我们做项目开发的时候,要善于借助已经有的轮子,让自己的开发更有效率,也更容易实现 。
在我们做项目开发的时候,会有增、删、改和查,现在增和查你已经学会了,那么就给你留 2 个作业,任选其中 1 个即可,它们是:
修改一个用户的名字;
删除一个用户 。
下一讲,也就是本专栏的最后一讲,我将为你介绍如何使用 Go 语言实现 RPC 服务,记得来听课哦 。
22 网络编程:Go 语言如何通过 RPC 实现跨平台服务?
在上一讲中,我为你讲解了API 的规范以及实现,并且留了两个作业,它们分别是删除和修改用户,现在我为你讲解这两个作业 。
删除一个用户比较简单,它的 API 格式和获取一个用户一样,但是 HTTP 方法换成了 。删除一个用户的示例代码如下所示:
ch21/main.go
func main() {//省略没有修改的代码r.DELETE("/users/:id", deleteUser)}func deleteUser(c *gin.Context) {id := c.Param("id")i := -1//类似于数据库的SQL查询for index, u := range users {if strings.EqualFold(id, strconv.Itoa(u.ID)) {i = indexbreak}}if i >= 0 {users = append(users[:i], users[i+1:]...)c.JSON(http.StatusNoContent, "")} else {c.JSON(http.StatusNotFound, gin.H{"message": "用户不存在",})}}
这个示例的逻辑就是注册方法,达到删除用户的目的 。删除用户的逻辑是通过ID 查询:
实现了删除用户的逻辑后,相信你已经会修改一个用户的名字了,因为它和删除一个用户非常像,实现代码如下所示:
func main() {//省略没有修改的代码r.PATCH("/users/:id",updateUserName)}func updateUserName(c *gin.Context) {id := c.Param("id")i := -1//类似于数据库的SQL查询for index, u := range users {if strings.EqualFold(id, strconv.Itoa(u.ID)) {i = indexbreak}}if i >= 0 {users[i].Name = c.DefaultPostForm("name",users[i].Name)c.JSON(http.StatusOK, users[i])} else {c.JSON(http.StatusNotFound, gin.H{"message": "用户不存在",})}}
整体代码逻辑和删除的差不多的,只不过这里使用的是 PATCH方法 。
什么是RPC 服务
RPC,也就是远程过程调用,是分布式系统中不同节点调用的方式(进程间通信),属于 C/S 模式 。RPC 由客户端发起,调用服务端的方法进行通信,然后服务端把结果返回给客户端 。