Это первый раз, когда я участвую в Gengwen Challenge.26День, подробности о событии уточняйте:Обновить вызов
Как серверная часть на работе предоставляет API? свагго это хорошо
В прошлый раз, когда мы кратко поделились Casbin управления разрешениями GO, он обычно ссылается наВ соответствии с правилами безопасности или политиками безопасности, установленными системой
- поделился, что такое управление разрешениями
- что такое кабин
- Особенности Касбина
- Кейсы для Casbin
Если вы заинтересованы, мы можем обсудить и поделиться более подробно в будущем, добро пожаловать в статьюCasbin для управления разрешениями GO
Сегодня давайте расскажем, как работают наши серверные партнеры.APIЭффективно предоставлять?
API состоит из набора определений и протоколов, которые можно использовать для создания и корпоративной интеграции прикладного программного обеспечения.
API естьинтерфейс прикладного программирования
Я считаю, что многие друзья, которые любят писать документы, могут использоватьmarkdownЗапишите интерфейс, и соответствующее ответственное лицо согласует фиксированный шаблон
Некоторые будут использовать простые текстовые файлы, а некоторые старшие братья могут вообще не выводить никакой документации, поэтому они не переживут вторую серию сериала.
А при тестировании?
обычно используютpostmanИнструмент, установка параметров в соответствии с интерфейсом, выполнение самотестирования или написание скриптов для тестирования
Однако это слишком хлопотно, и написание интерфейса занимает слишком много времени, каждый раз, когда вы модифицируете интерфейс, вы должны соответствующим образом модифицировать документ, что довольно громоздко и немного античеловечно.
Тогда давайте посмотрим на GOswaggoКак инструмент решает вышеперечисленные проблемы и какие есть хитрости?
Что такое свагго?
это инструмент, предназначенный дляgolangАннотации автоматически преобразуются вSwagger 2.0Документация
Что такое Сваггер?
Swaggerэто веб-сервисЭто каноническая и полная структура для создания, описания, вызова и визуализации документов в стиле RESTful.
Так в чем же его преимущество?
примерно так2Преимущества:
- Поддержка API для автоматического создания синхронизированной онлайн-документации
использоватьSwaggerПосле этого вы можете генерировать документацию прямо через код, и вам больше не нужно вручную писать документацию по интерфейсу самостоятельно.
- Предоставляет API для онлайн-тестирования веб-страниц.
SwaggerСгенерированная документация также поддерживает онлайн-тестирование
Все параметры и форматы установлены, и вы можете напрямую вводить значения, соответствующие параметрам интерфейса, для тестирования интерфейса в режиме онлайн.
Как мы используем свагго?
Давайте напишем базовый для васswaggoИспользование кейса условно делится на следующие этапы:
- Установить
swag, для автоматического документирования
go get -u github.com/swaggo/swag/cmd/swag
- Вам нужно использовать следующие 2 пакета. Сначала вы можете узнать. Мы по-прежнему используем go mod по умолчанию. После написания кода перейдите к сборке напрямую, и все используемые пакеты будут извлечены.
первыйgin-swagger, нам удобнее использовать джин для игры в чванство, и я делился им с вами ранееginЕсли вы заинтересованы, вы можете проверить статьюДжин боевая тренировка
go get github.com/swaggo/gin-swagger
Второйswaggerвстроенный файл
go get github.com/swaggo/gin-swagger/swaggerFiles
- Требуется простое использование фреймворка gin
Давайте начнем кодировать простой маленькийDEMO
package main
import (
"github.com/gin-gonic/gin"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
"net/http"
_ "myswa/docs"
)
// gin 的处理函数 Hello
func Hello(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"msg": "hello wrold xiaomotong" })
}
func main() {
r := gin.Default()
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// 路由分组, 第一个版本的api v1
v1 := r.Group("/api/v1")
{
v1.GET("/hello", Hello)
}
// 监听端口为 8888
r.Run(":8888")
}
Приведенный выше код примерно разделен на следующие шаги:
- использовать
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))Зарегистрируйте swaggerFiles.Handler на - Напишите собственный маршрут и соответствующий метод
- Прослушать указанный адрес и порт
После того, как приведенный выше код написан, мы можемmain.goИнициализируйте один в родственном каталогеgo модуль, затемgo buildмы запускаем программу
go mod init myswa
go build
указанная выше командаgo mod init myswa, модуль инициализацииmyswa, после импорта нашего локального пути к пакету он должен бытьmyswaначало
После выполнения вышеуказанной командыmyswa модуль, который выполняет go buildПосле этого соответствующие используемые пакеты будут извлечены и скомпилированы.
После успешной компиляции введите в браузере:
http://127.0.0.1:8888/swagger/index.html
Если вы видите следующее сообщение об ошибке, причина в том, что он не установленswagизdocs
Здесь вы можете проверить, успешно ли установлен swag
go get -u github.com/swaggo/swag/cmd/swag
После успешной установки вы можете использовать swag init для инициализации,swagпоможет нам создать соответствующийdocs, например мой каталог кода выглядит так
Вот почему один из импортированных нами пакетов_ "myswa/docs"
Введите в браузере еще раз:
http://127.0.0.1:8888/swagger/index.html, вы можете увидеть следующий эффект, это успешно
добавить заметки
мыmain.goВ файл добавьте несколько комментариев, чтобы увидеть эффект, например
package main
import (
"github.com/gin-gonic/gin"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
"net/http"
_ "myswa/docs"
)
// gin 的处理函数 Hello
func Hello(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"msg": "hello wrold xiaomotong" })
}
// @title Xiaomotong Swagger API
// @version 1.0
// @description 参加更文挑战第 26 天了,主题是 Swagger
// @termsOfService https://juejin.cn/user/3465271329953806
// @contact.name https://juejin.cn/user/3465271329953806
// @contact.url https://juejin.cn/user/3465271329953806
// @contact.email xxx@xxx.com.cn
// @host 127.0.0.1:8888
// @BasePath /api/v1
func main() {
r := gin.Default()
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// 路由分组, 第一个版本的api v1
v1 := r.Group("/api/v1")
{
v1.GET("/hello", Hello)
}
// 监听端口为 8888
r.Run(":8888")
}
После добавления комментария выполните следующее3шаг:
- Удалить созданный ранее каталог документов
- снова в
main.goВыполнить в том же каталогеswag initСоздание последней документации - воплощать в жизнь
go run main.go, доступ через браузерhttp://127.0.0.1:8888/swagger/index.htmlМы можем наблюдать следующий эффект
На этом этапе загляните в созданный нами каталог документов, чтобы узнать, что представляет собой конкретное содержимое файла.
Они автоматически генерируются
my_swa/docs/swagger.jsonследующим образом
{
"swagger": "2.0",
"info": {
"description": "参加更文挑战第 26 天了,主题是 Swagger",
"title": "Xiaomotong Swagger API",
"termsOfService": "https://juejin.cn/user/3465271329953806",
"contact": {
"name": "https://juejin.cn/user/3465271329953806",
"url": "https://juejin.cn/user/3465271329953806",
"email": "xxx@xxx.com.cn"
},
"version": "1.0"
},
"host": "127.0.0.1:8888",
"basePath": "/api/v1",
"paths": {}
}
my_swa/docs/swagger.yamlследующим образом:
basePath: /api/v1
host: 127.0.0.1:8888
info:
contact:
email: xxx@xxx.com.cn
name: https://juejin.cn/user/3465271329953806
url: https://juejin.cn/user/3465271329953806
description: 参加更文挑战第 26 天了,主题是 Swagger
termsOfService: https://juejin.cn/user/3465271329953806
title: Xiaomotong Swagger API
version: "1.0"
paths: {}
swagger: "2.0"
действительныйUIПоказанные данные взяты из двух вышеуказанных файлов.
Для ключевых слов в комментариях выше, давайте сделаем таблицу, чтобы увидеть
| tag | иллюстрировать |
|---|---|
| titile | название документа |
| version | Версия |
| description | Описание, доступное для записи или нет |
| host | портовый документ |
| BasePath | базовый путь |
| Summary | Суммировать |
| Description | описывать |
| Tags | Используется для группировки API |
| Accept | Тип принимаемого параметра, поддерживает форму (mpfd) и JSON(json) |
| Param | Параметры, конкретная запись выглядит следующим образом: @Param 参数名 参数类型 参数数据类型 是否必须 参数描述 其他属性тип параметра - pathЗначения этого типа могут быть напрямую вставлены в URL@Param name path string true "конкретное имя"- queryЭтот тип значения обычно сочетается с URL- queryЭтот тип значения обычно сочетается с URLСтрока запроса имени @Param true "конкретное имя" - formDataЗначения этого типа обычно используются для метода POST или метода PUT.@Param name formData string true "конкретное имя" по умолчанию (корень) Типы данных параметров следующие** строка(строка) , целое число (int, uint, uint32, uint64) , число (float32) , логическое значение (bool) , файл для загрузки файлов Дополнительная поддержка недвижимости: - 枚举- 值的添加范围- 设置默认值 |
| Success | Как быть с успешным ответом @Success HTTP响应码 {响应参数类型} 响应数据类型 其他描述
|
| Failure | Что делать, если ответ не работает @Failure HTTP响应码 {响应参数类型} 响应数据类型 其他描述
|
| Router | маршрутизация, без базового пути @Router /hello [get] |
Добавим к функции соответствующие комментарии, чтобы увидеть эффект
// @Summary hello world
// @Description 对谁说 hello wrold
// @Tags 挑战测试
// @Accept json
// @Param name query string true "具体名字"
// @Success 200 {string} string "{"msg": "hello xxx"}"
// @Failure 400 {string} string "{"msg": "NO name"}"
// @Router /hello [get]
// gin 的处理函数 Hello
func Hello(c *gin.Context) {
name := c.Query("name")
c.JSON(http.StatusOK, gin.H{"msg": "hello wrold" + name})
}
После добавления комментария выполните следующее3шаг:
- Удалить созданный ранее каталог документов
- снова в
main.goВыполнить в том же каталогеswag initСоздание последней документации - воплощать в жизнь
go run main.go, доступ через браузерhttp://127.0.0.1:8888/swagger/index.htmlМы можем наблюдать следующий эффект
Проведем базовый тест на странице, заполним имя, выполним и посмотрим на эффект
Нет, тест прошел успешно
Если такой документ дадут, то он будет очень дружелюбен к интерфейсу, и это не увеличит нашу нагрузку.При написании кода, кстати, пишите комментарии.
выпускать
После завершения разработки, когда версия выпущена, невозможно внести своюapiЗадокументируйте это, этого не должно быть
Следовательно, мы можем пройтиbuild tagспособ контролировать, компилировать ли документ, вот ожидание, заинтересованные друзья могут попробовать
Заинтересованные друзья, вы можете вставить приведенный выше код в локальную папку, установить соответствующую библиотеку, выполнить ее и увидеть эффект, ее действительно легко использовать, надеюсь, она вам поможет.
Суммировать
- что такое свагго
- что такое чванство
- Как использовать свагго
- Как протестировать свагго
Добро пожаловать лайк, подписка, избранное
Друзья, ваша поддержка и поощрение мотивируют меня продолжать делиться и улучшать качество.
Хорошо, вот и на этот раз,Таймер Next GO и временная задача cron
Технологии открыты, и наш менталитет должен быть открытым. Примите перемены, живите на солнце и двигайтесь вперед.
ямаленький дьяволенок Нежа, добро пожаловать, лайкайте, подписывайтесь и добавляйте в избранное, увидимся в следующий раз~