本文介绍: 开启一个简单的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进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注