成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ThinkPHP與Gin框架之集成SwaggerApi接口文檔生成工具

開發 前端
SwaggerApi 接口文檔只需要在相應代碼的位置寫上對應的注釋,便可以通過工具生成文檔,這種方式極大的簡化了寫接口文檔的工作量。

大家好,我是碼農先森。

想必大家對接口文檔都不陌生了,程序員有件很苦惱的事情就是「最討厭別人的項目不寫接口文檔,但是又最討厭自己來寫文檔」說的是不是你哈哈。雖然很討厭,但是你也沒有辦法啊,畢竟人還得吃飯,又不能提桶跑路。其實寫接口文檔并不全是壞處,好處也是很多的,比如可以減少前后端的扯皮成本、清晰的接口文檔可以讓對方閉嘴、避免大家亂甩鍋等等。

在之前我也不喜歡寫接口文檔,也不喜歡寫注釋,然后過一段時間來看自己的代碼,結果一臉懵逼自己都看不懂了,我相信大家也這種經歷吧,所以嘛有時間還是得寫寫,避免出現自己挖坑自己跳的尷尬局面。那么這次我主要分享的內容是 SwaggerApi 接口文檔,不過有人會質疑了這個東西不是大家都會用了嗎?但是我想說的是,你會用但是不代表所有人都會哦,所以呢這篇文章主要是分享給那些還未曾使用過這個工具的人,希望對這些人能有所幫助。

話不多說,開整!我們先來看一下整體的項目目錄結構,內容主要分為 PHP 和 Go 兩部分。

[manongsen@root php_to_go]$ tree -L 2
.
├── go_swagger
│   ├── app
│   │   ├── controller
│   │   │   └── user.go
│   │   └── route.go
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── php_swagger
│   ├── app
│   │   ├── command
│   │   │   └── Swagger.php
│   │   ├── controller
│   │   │   └── User.php
│   ├── composer.json
│   ├── composer.lock
│   ├── config
│   ├── public
│   │   |── swagger-ui
│   │   └── swagger.json
│   ├── route
│   │   └── app.php
│   ├── think
│   ├── vendor
│   └── .env

ThinkPHP

使用 composer 創建基于 ThinkPHP 框架的 php_swagger 項目。

## 當前目錄
[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/php_swagger

## 安裝 ThinkPHP 框架
[manongsen@root php_swagger]$ composer create-project topthink/think php_swagger
[manongsen@root php_swagger]$ cp .example.env .env

## 安裝 Swagger 相關 Composer 擴展包
[manongsen@root php_swagger]$ composer require zircote/swagger-php
[manongsen@root php_swagger]$ composer require doctrine/annotations

執行 php think make:command Swagger 命令,創建一個用于生成 Swagger 文檔的腳本。

<?php
declare (strict_types = 1);

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use app;

use OpenApi\Generator;

class Swagger extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('app\command\swagger')
            ->setDescription('the app\command\swagger command');
    }

    protected function execute(Input $input, Output $output)
    {
        $openapi = \OpenApi\Generator::scan([__DIR__ . '/../../app/controller/']);
        file_put_contents(__DIR__ . '/../../public/swagger.json', $openapi->toJson());        
        $output->writeln('執行成功, 接口文檔請訪問 http://127.0.0.1:8000/swagger-ui/dist/index.html');

        // 指令輸出
        $output->writeln('app\command\swagger');
    }
}

在 php_swagger 項目中執行 php think make:Controller User 命令,創建一個 User 控制器。

<?php

namespace app\controller;

use OpenApi\Annotations as OA;
use app\BaseController;

/**
 * @OA\Info(title="ThinkPHP框架之用戶中心系統 API", version="1.0")
 */
class User extends BaseController
{
    /**
     * @OA\Get(
     *    description="用戶詳情",
     *    path="/api/v1/user/info",
     *    @OA\Parameter(in="query", required=true, name="user_id", @OA\Schema(type="integer"), description="用戶ID"),
     *    @OA\Response(
     *        response=200,
     *        description="返回數據",
     *        @OA\JsonContent(type="object",
     *            @OA\Property(property="code", type="int"),
     *            @OA\Property(property="message", type="string"),
     *            @OA\Property(property="data", type="object",
     *              @OA\Property(property="user_id", type="integer"),
     *              @OA\Property(property="user_name", type="string"),
     *              @OA\Property(property="mobile", type="string"),
     *              @OA\Property(property="email", type="string"),
     *            ),
     *         ),
     *     ),
     *     @OA\Response(response=401, description="Unauthorized"),
     *     @OA\Response(response=404, description="Not Found"),
     * )
     */
    public function info()
    {
        // TODO::自行實現具體的業務邏輯
    }

    /**
     * @OA\Get(
     *    description="用戶列表",
     *    path="/api/v1/user/list",
     *    @OA\Parameter(in="query", required=false, name="page_size", @OA\Schema(type="integer"), description="頁碼"),
     *    @OA\Parameter(in="query", required=false, name="page_limit", @OA\Schema(type="integer"), description="條數"),
     *    @OA\Response(
     *        response=200,
     *        description="返回數據",
     *        @OA\JsonContent(type="object",
     *            @OA\Property(property="code", type="int"),
     *            @OA\Property(property="message", type="string"),
     *            @OA\Property(property="data", type="array",
     *                @OA\Items(type="object",
     *                    @OA\Property(property="user_id", type="integer"),
     *                    @OA\Property(property="user_name", type="string"),
     *                    @OA\Property(property="mobile", type="string"),
     *                    @OA\Property(property="email", type="string"),
     *                ),
     *            ),
     *         ),
     *     ),
     *     @OA\Response(response=401, description="Unauthorized"),
     *     @OA\Response(response=404, description="Not Found"),
     * )
     */
    public function list()
    {
        // TODO::自行實現具體的業務邏輯
    }

    /**
     * @OA\Post(
     *     description="創建用戶",
     *     path="/api/v1/user/create",
     *     @OA\RequestBody(required=true,description="請求數據",content={
     *       @OA\MediaType(mediaType="application/json",
     *           @OA\Schema(
     *               @OA\Property(
     *                   property="username",
     *                   type="string",
     *                   description="用戶名"
     *               ),
     *               @OA\Property(
     *                   property="phone",
     *                   type="string",
     *                   description="手機號",
     *               ),
     *               @OA\Property(
     *                   property="email",
     *                   type="string",
     *                   description="郵箱",
     *               )
     *           )
     *       )
     *      }),
     *    @OA\Response(
     *        response=200,
     *        description="返回數據",
     *        @OA\JsonContent(type="object",
     *            @OA\Property(property="code", type="int"),
     *            @OA\Property(property="message", type="string"),
     *         ),
     *     ),
     *     @OA\Response(response=401, description="Unauthorized"),
     *     @OA\Response(response=404, description="Not Found"),
     * )
     * )
     */
    public function create()
    {
        // TODO::自行實現具體的業務邏輯
    }


    /**
     * @OA\Post(
     *     description="更新用戶",
     *     path="/api/v1/user/update",
     *     @OA\RequestBody(required=true, description="請求數據", content={
     *       @OA\MediaType(mediaType="application/json",
     *           @OA\Schema(
     *               @OA\Property(
     *                   property="user_id",
     *                   type="integer",
     *                   description="用戶ID",
     *               ),
     *               @OA\Property(
     *                   property="username",
     *                   type="string",
     *                   description="用戶名"
     *               ),
     *               @OA\Property(
     *                   property="phone",
     *                   type="string",
     *                   description="手機號",
     *               ),
     *               @OA\Property(
     *                   property="email",
     *                   type="string",
     *                   description="郵箱",
     *               )
     *           )
     *       )
     *      }),
     *    @OA\Response(
     *        response=200,
     *        description="返回數據",
     *        @OA\JsonContent(type="object",
     *            @OA\Property(property="code", type="int"),
     *            @OA\Property(property="message", type="string"),
     *        ),
     *     ),
     *     @OA\Response(response=401, description="Unauthorized"),
     *     @OA\Response(response=404, description="Not Found"),
     * )
     * )
     */
    public function update()
    {
        // TODO::自行實現具體的業務邏輯
    }
}

先執行 php think swagger 生成 Swagger 文檔,然后再執行 php think run 運行項目,最后在瀏覽器上訪問地址 http://127.0.0.1:8000/swagger-ui/dist/index.html 即可看到實際效果。

圖片圖片

Gin

通過 go mod 初始化 go_swagger 項目。

## 當前目錄
[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/go_swagger
[manongsen@root go_swagger]$ go mod init go_swagger

## 安裝 Gin 框架 
[manongsen@root go_swagger]$ go get github.com/gin-gonic/gin

## 安裝 Swagger 相關依賴庫
[manongsen@root go_swagger]$ go get github.com/swaggo/files
[manongsen@root go_swagger]$ go get github.com/swaggo/gin-swagger

## 安裝 Swagger 文檔生成工具
[manongsen@root go_swagger]$ go install github.com/swaggo/swag/cmd/swag@latest

在 go_swagger 項目中創建 user 控制器。

package controller

import (
 "github.com/gin-gonic/gin"
)

type UserStruct struct {
 UserId   string `json:"user_id"`
 UserName string `json:"user_name"`
 Mobile   string `json:"mobile"`
 Email    string `json:"email"`
}

type UserInfoRespose struct {
 Code    int        `json:"code" `
 Message string     `json:"message"`
 Data    UserStruct `json:"data"`
}

// @BasePath /api/v1
// 用戶信息
// @Summary 用戶信息
// @Schemes
// @Description 用戶信息
// @Tags user
// @Produce json
// @Param id path int true  "用戶ID"
// @success 200 {object} UserInfoRespose{data=UserStruct} "返回數據"
// @failure 401 string Unauthorized "Unauthorized"
// @failure 404 string NotFound "Not Found"
// @Router /user/info [get]
func UserInfo(c *gin.Context) {
 // TODO::自行實現具體的業務邏輯
}

type UserListRespose struct {
 Code    int           `json:"code" `
 Message string        `json:"message"`
 Data    []*UserStruct `json:"data"`
}

// @BasePath /api/v1
// 用戶列表
// @Summary 用戶列表
// @Schemes
// @Description 用戶列表
// @Tags user
// @Produce json
// @Param page_size path int true  "頁碼"
// @Param page_limit path int true  "條數"
// @success 200 {object} UserListRespose{data=[]UserStruct} "返回數據"
// @failure 401 string Unauthorized "Unauthorized"
// @failure 404 string NotFound "Not Found"
// @Router /user/list [get]
func UserList(c *gin.Context) {
 // TODO::自行實現具體的業務邏輯
}

type CreateUserRequest struct {
 UserName string `json:"user_name"`
 Mobile   string `json:"mobile"`
 Email    string `json:"email"`
}

type CreateUserRespose struct {
 Code    int    `json:"code" `
 Message string `json:"message"`
}

// @BasePath /api/v1
// 創建用戶
// @Summary 創建用戶
// @Schemes
// @Description 創建用戶
// @Tags user
// @Accept json
// @Produce json
// @Param req body CreateUserRequest true "創建用戶"
// @success 200 {object} CreateUserRespose{} "返回數據"
// @failure 401 string Unauthorized "Unauthorized"
// @failure 404 string NotFound "Not Found"
// @Router /user/create [post]
func CreateUser(c *gin.Context) {
 // TODO::自行實現具體的業務邏輯
}

type UpdateUserRequest struct {
 UserId   string `json:"user_id"`
 UserName string `json:"user_name"`
 Mobile   string `json:"mobile"`
 Email    string `json:"email"`
}

type UpdateUserRespose struct {
 Code    int    `json:"code" `
 Message string `json:"message"`
}

// @BasePath /api/v1
// 更新用戶
// @Summary 更新用戶
// @Schemes
// @Description
// @Tags user
// @Accept json
// @Produce json
// @Param req body UpdateUserRequest true "更新用戶"
// @success 200 {object} UpdateUserRespose{} "返回數據"
// @failure 401 string Unauthorized "Unauthorized"
// @failure 404 string NotFound "Not Found"
// @Router /user/update [post]
func UpdateUser(c *gin.Context) {
 // TODO::自行實現具體的業務邏輯
}

先執行 swag init 命令生成 Swagger 文檔,然后再執行 go run main.go 運行項目,最后在瀏覽器上訪問 http://127.0.0.1:8080/swagger/index.html 即可看到實際效果。

圖片圖片

接口文檔是每個項目都不可或缺的部分,同時也是前后端聯調接口的橋梁,它讓團隊的協作效率得到了顯著的提升。SwaggerApi 接口文檔只需要在相應代碼的位置寫上對應的注釋,便可以通過工具生成文檔,這種方式極大的簡化了寫接口文檔的工作量。通過這次內容的分享相信大家對這個工具都有些許的了解了吧,不過最好是能自己再實踐一遍,學習的效果會更好。如果有想要獲取完整的代碼的朋友,可以在公眾號內回復「5148」即可獲取到,希望對大家能有所幫助,此外為了方便大家學習再附上相關的官方文檔。

  • https://zircote.github.io/swagger-php/
  • https://github.com/swaggo/swag/blob/master/README.md
責任編輯:武曉燕 來源: 碼農先森
相關推薦

2025-03-31 01:30:00

Gin框架模型

2021-09-09 10:23:08

GinNetHttp

2024-01-03 15:41:49

2024-03-05 07:55:41

框架GINGo

2024-02-19 07:40:10

2024-07-02 10:40:35

2021-04-16 07:31:50

工具Postman接口

2015-03-02 14:00:54

2009-06-19 16:25:34

Flex與Spring

2021-04-02 08:02:10

Gin集成Casbin開源

2024-12-09 00:00:15

Gin框架中間件

2022-03-07 20:58:08

接口RestJMS

2023-11-17 12:11:26

GORMGo Web

2024-12-24 10:50:05

GinWeb開發

2023-03-06 08:53:13

2023-03-08 08:48:50

Swag工具

2025-04-11 08:30:39

2023-03-10 09:41:16

NAPI框架鴻蒙

2024-09-30 08:10:22

2021-07-13 07:22:24

框架DjangoSession
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩在线视频一区 | 在线视频一区二区三区 | 最新日韩在线视频 | 精品欧美乱码久久久久久1区2区 | 欧美在线天堂 | 日韩1区2区| 日韩三级在线 | 一区二区三区四区毛片 | 国产激情在线 | 日韩中文字幕在线 | 欧美午夜在线 | 国产成人在线免费 | 日本一二区视频 | 久久网站黄 | 久久久久久天堂 | 九九亚洲| 国产色在线 | 不卡一区二区三区四区 | 午夜视频免费在线观看 | 福利视频一二区 | 久草中文网 | 亚洲欧美一区二区三区在线 | 久久综合久| 91九色视频| 欧美一区不卡 | 久久一起草 | 国产午夜精品视频 | 四虎永久免费影院 | 久久精品超碰 | 精品国产乱码一区二区三区 | www.伊人.com| 日本亚洲欧美 | 国产女人与拘做视频免费 | 久久精品综合网 | 久久久免费 | 成人在线免费视频观看 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 91在线精品一区二区 | 国产成人精品一区二区三 | 91精品国产综合久久久久久漫画 | 黄色在线免费播放 |