本文介绍: 开启一个简单的API服务。golang的教程网上一大堆,官网也有非常详细的教程,这里不在赘述这些基础语法教程,我们意在快速进入项目开发阶段。
开启一个简单的API服务。
golang的教程网上一大堆,官网也有非常详细的教程,这里不在赘述这些基础语法教程,我们意在快速进入项目开发阶段。
golang好用语法教程传送门: m.runoob.com/go/
编写第一个API
前提:按照上一篇文档初始化项目
1. 下载gin框架,一个非常好用的写API的框架,使用也很广泛
# 在项目文件下执行go命令下载gin依赖
go mod get github.com/gin-gonic/gin
2. 创建API文件夹:apis
3. 在apis创建第一个API文档:hello.go
4. 实现一个入参为name,返回为:hello name的api
package apis
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
// API入参参数
type HttpRequest struct {
Name string `json:"name"`
}
// API响应参数
type HttpRespone struct {
Status int `json:"status"`
Message string `json:"message"`
Data string `json:"data"`
}
/*
实现一个入参为name,响应为:hello name的api
这个例子中,异常信息通过status和message返回,api响应状态正常,如果需要响应400等异常状态,可以更换c.JSON(http.StatusOK, res)中的StatusOK
*/
func Hello(c *gin.Context) {
// 声明req
var req HttpRequest
// 声明res并初始化
var res = HttpRespone{}
// 获取api请求参数
err := c.ShouldBindBodyWith(&req, binding.JSON)
// 出现错误,则响应错误信息
if err != nil {
res.Status = 10
res.Message = "读取请求参数错误"
c.JSON(http.StatusOK, res)
return
}
// 判断是否入参name
if req.Name == "" {
res.Status = 20
res.Message = "参数name为空"
c.JSON(http.StatusOK, res)
return
}
// 正常响应 hello name
res.Status = 0
res.Message = "成功"
res.Data = fmt.Sprintf("hello %v", req.Name)
c.JSON(http.StatusOK, res)
}
5. 在apis文件夹中创建apis.go,编写api路由注册和服务启动方法
package apis
import (
"net/http"
"github.com/gin-gonic/gin"
)
func StartHttp() {
// 设置为发布模式(初始化路由之前设置)
gin.SetMode(gin.ReleaseMode)
// gin 默认中间件
r := gin.Default()
// 访问一个错误路由时,返回404
r.NoRoute(func(c *gin.Context) {
c.JSON(http.StatusNotFound, gin.H{
"status": 404,
"message": "404, page not exists!",
})
})
// 注册hello路由
r.POST("/hello", Hello)
// 启动API服务
if err := r.Run(":8080"); err != nil {
panic(err)
}
}
6. 入口文件main.go引用apis模块
package main
import "prj_aiee/apis"
func main() {
apis.StartHttp()
}
完整的项目文件构成如图:
7. 启动服务
# 项目文件夹下执行go命令
go run main.go
8. 调用api
# 执行curl命令调用API
curl -X POST "http://localhost:8080/hello" -H "content-type: application/json" -d "{"name": "aiee"}"
9. 响应如下: {“status”:0,”message”:”成功”,”data”:”hello aiee”}
项目源码:GitHub – liyonge-cm/go_prj_aiee: go api 服务 demo
原文地址:https://blog.csdn.net/sinat_34209942/article/details/135524949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_55430.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。