当前位置:网站首页>基于gin-gonic设计api接口
基于gin-gonic设计api接口
2022-08-05 20:35:00 【PHP代码】
安装gin-gonic包
go get github. com /gin-gonic/gin
工程中引入gin-gonic和http包
import (
"github.com/gin-gonic/gin"
"net/http"
)
配置http监听端口:8081和定义文章接口路由地址
配置http监听端口
func HttpServer() {
router := gin.Default()
// 设置跨域
router.Use( cors ())
ua := router.Group("/api/v1/articles")
{
ua.GET("/:uid/:sid", apis.GetUserArticleList)
}
router.Run(":8081")
}配置跨域请求cors
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
c. Header ("Access-Control-Allow-Origin", "*")
c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
c.Header("Access-Control-Allow-Credentials", "true")
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
// 处理请求
c.Next()
}
} 定义 api接口
定义文章结构体及 json 输出字段
type ArticleVO struct {
/**
* 文章id
*/
id string `json:"id"`
/**
* 文章标题
*/
title string `json:"title"`
/**
* 文章摘要
*/
summary string `json:"summary"`
/**
* 省分名称
*/
prodeptName string `json:"prodeptName"`
/**
* 文章样式Id
*/
contentId string `json:"contentId"`
/**
* 文章样式
*/
content string `json:"content"`
/**
* 是否置顶
*/
isTop bool `json:"isTop"`
/**
* 所属父级分类名称
*/
pcategoryname string `json:"pcategoryname"`
/**
* 所属父级分类名称
*/
pcategoryid string `json:"pcategoryid"`
/**
* 分类名称
*/
categoryname string `json:"categoryname"`
/**
* 分类ID
*/
categoryId string `json:"categoryId"`
/**
* 文章起草者
*/
createUserId string `json:"createUserId"`
/**
* 文章起草名称
*/
createUserName string `json:"createUserName"`
/**
* 是否是集团新闻
*/
isHeadgroup bool `json:"isHeadgroup"`
/**
* 阅读量
*/
readCount int64 `json:"readCount"`
/**
* 重要性:1#普通,2#普通,3#重要,4#非常重要
*/
vital int `json:"vital"`
/**
* 发布开始时间
*/
publishBeginTime string `json:"publishBeginTime"`
/**
* 发布结束时间
*/
publishEndTime string `json:"publishEndTime"`
/**
*是否显示0不显示1显示
*/
isHide int `json:"isHide"`
/**
* 是否推荐(1-是,0-否)
*/
isRecommend bool `json:"isRecommend"`
}
引入gin-gonic和json包
import (
...
"encoding/json"
"github.com/gin-gonic/gin"
...
)定义获取文章列表接口
func GetUserArticleList(c *gin.Context) {
uid := c.Param("uid")
sid := c.Param("sid")
key := common.USER_ART_PREFIX + ":" + uid + ":" + sid
jsonStr := ctx.Godis.Get(key)
log.Println(jsonStr)
articleData := make([]map[string]interface{}, 0)
json.Unmarshal([] byte (jsonStr), &articleData)
c.JSON(200, articleData)
}
通过gin.Context上下文获取从客户端获取请求参数uid:用户id和sid:岗位id,通过key获取缓存用户文章列表json字符串。通过json.Unmarshal方法反序列化成map,以json格式返回客户端。
启动http server
引入http包
import (
...
"ucm/http"
)
func main() {
http.HttpServer()
}工程结构

看看效果,小试一把
接口地址:
可以用谷歌浏览器插件json-handle格式化文章json数据
{
"id":"655505536506138624",
"title":"今年端午粽子卖了多少个?答案有点惊人",
"prodeptName":"湖南省"
...省略...
}
边栏推荐
- Rust学习笔记:3.1 变量与可变性
- 介绍继承 抽象类
- 【广告电商】全球排行榜前十的广告投放有哪些公司?
- D碳社区推荐读物:《碳中和与中国未来》:从大国博弈角度解读碳中和
- LeetCode 0623.在二叉树中增加一行:DFS / BFS
- 【apt time reached】error while loading shared libraries:libxxxx.so.xx.xx,共享库文件找不到,解决办法
- 数据分析的必备能力:数据敏感度是什么,应该怎样培养?
- codeforces:D. Chip Move【dp + 逆向思维考虑】
- SwiftUI case: Lottie loading animation
- 攻防视角下,初创企业安全实战经验分享
猜你喜欢

电脑电源灯一闪一闪开不了机怎么办

C#NET6基于MailKit 进行邮件发送通知

【HMS core】【Analytics Kit】华为分析服务常见问题FAQ 2

AI 创作,没有灵魂?

如何使用Solidity和Hardhat构建你自己的NFT以及NFT交易市场

链表系列① -- 移除链表元素

使用compose实现康威生命游戏之二:我是如何将计算速度缩减将近十倍的

Aurora push custom sound stepping record (continuous update)

623. 在二叉树中增加一行

At this stage, how do you grasp the opportunities in the metaverse NFG industry?
随机推荐
AI 创作,没有灵魂?
TypeError:List indices must be integers or slices , not str
C#NET6基于MailKit 进行邮件发送通知
opencv 图像拼接SURF
TCP & UDP
【StoneDB子查询优化】subquery子查询-内存拷贝分析及优化
攻防视角下,初创企业安全实战经验分享
LeetCode 0623.在二叉树中增加一行:DFS / BFS
【StoneDB子查询优化】subquery子查询-exists子查询的剔除遍历处理
SwiftUI case: custom loading animation
[KITTI] ros Error transforming odometry ‘Odometry‘ from frame ‘/map‘ to frame ‘map‘
“星辰大海”开启 孙宇晨为人类未来付出的一张“超额门票”
大屏可视化工具腾讯云图
js json arr str 转化为arr
JS高阶(一)Promise
Guitar Pro 8吉他新版功能特性简介
技术内幕 | StarRocks Community Champion、阿里云技术专家解读 Optimizer 实现
App测试时常用的adb命令你都掌握了哪些呢?
链表系列① -- 移除链表元素
What adb commands have you mastered in app testing?