aliyun-api-manage/apigateway

AliYun ApiGateWay Api Manage

dev-master 2020-05-27 08:58 UTC

This package is auto-updated.

Last update: 2025-06-27 20:12:42 UTC


README

阿里云api网关,以接口形式进行管理(以Laravel 5.7为例,结合了dingo和jwt)

使用该扩展前,请先安装以下扩展

  • 项目根目录composer.json文件的安装方式:

    "require": {

      ...    
      "dingo/api": "^2.1",
      "tymon/jwt-auth": "1.*@rc",
      "alibabacloud/sdk": "^1.2"
      ...
    

    }

  • 命令行的安装方式:

    dingo扩展: composer require "dingo/api: ^2.1"

    jwt扩展: composer require "tymon/jwt-auth: 1.*@rc"

    阿里云api网关sdk: composer require alibabacloud/sdk

安装该composer包

composer require aliyun-api-manage/apigateway

使用

  • 在config/app.php文件中添加以下内容: 'providers' => [

      ...
      AliYun\ApiGateWay\ServiceProvider::class,
      ...
    

    ]

  • 发布config配置文件(选择相应的扩展包进行发布)

    php artisan vendor:publish --provider="AliYun\ApiGateWay\ServiceProvider"

  • 配置config/apiGateWay.php文件中的信息

  • 添加访问的路由

    注:

    1.v1:此处结合了dingo的路由版本控制;

    2.用postman请求时,如果dingo开启了严格模式,需要在Headers中添加 application/prs.xxx.v1+json,xxx替换为.env文件定义的API_SUBTYPE

    //阿里云API网关 $api->version('v1', function ($api) {

      $api->group([
          'namespace' => 'AliYun\ApiGateWay\Controllers',
          'prefix' => 'apiGateWay'
      ], function ($api) {
    
          //应用
          $api->group(['prefix' => 'app'], function ($api) {
              $api->get('/', 'AppController@l');                              //列表
              $api->post('/', 'AppController@add');                           //添加
              $api->put('/', 'AppController@put');                            //修改
              $api->delete('/', 'AppController@del');                         //删除
    
              $api->get('/secret/{appId}', 'AppController@getSecretByAppId'); //根据App的编号,查询app密钥
              $api->put('/secret', 'AppController@putSecret');                //重置指定app(应用)密钥
          });
          
          //(专有网络)VPC授权
          $api->group(['prefix' => 'vpc'], function ($api) {
              $api->get('/', 'VpcController@l');                              //列表
              $api->post('/', 'VpcController@add');                           //添加
              $api->delete('/', 'VpcController@del');                         //撤销
          });
    
          //API分组+环境变量
          $api->group(['prefix' => 'apiGroup'], function ($api) {
    
              //API分组
              $api->get('/', 'ApiGroupController@l');                         //列表
              $api->get('/{groupId}', 'ApiGroupController@getByGroupId');     //详情
              $api->post('/', 'ApiGroupController@add');                      //添加
              $api->put('/', 'ApiGroupController@put');                       //修改
              $api->delete('/', 'ApiGroupController@del');                    //删除
    
              //环境变量
              $api->get('/env/{groupId}/{stageId}', 'ApiGroupController@getByGroupIdAndStageId'); //环境详情
              $api->post('/env', 'ApiGroupController@addEnv');                                    //添加
              $api->delete('/env', 'ApiGroupController@delEnv');                                  //删除
    
          });
    
          //API
          $api->group(['prefix' => 'api'], function ($api) {
              $api->get('/', 'ApiController@l');                              //查询定义中的API列表/查询已发布API列表
              $api->get('/{apiId}', 'ApiController@getByApiId');              //查询API定义(详情)
              $api->post('/', 'ApiController@add');                           //添加
              $api->put('/', 'ApiController@put');                            //修改
              $api->delete('/', 'ApiController@del');                         //删除
    
              $api->put('/publish', 'ApiController@publish');                 //发布
              $api->put('/offline', 'ApiController@offline');                 //下线
          });
    
          //API授权
          $api->group(['prefix' => 'apiAuthorize'], function ($api) {
              $api->get('/', 'ApiAuthorizeController@l');                     //可授权的app列表
              $api->post('/', 'ApiAuthorizeController@add');                  //给指定app添加多个API的访问权限
              $api->delete('/', 'ApiAuthorizeController@del');                //批量撤销指定app对多个API的访问权限
          });
    
      });
    

    });

  • 接口的使用

    添加:POST

    读取:GET

    修改:PUT

    删除:DELETE

  • 一、应用
  • 添加:/api/apiGateWay/app
  • 参数:
        app_name       应用名称       必填    
        description    APP描述信息
  • 读取:/api/apiGateWay/app
  • 参数:
        app_id       App的编号   
        page_size    每页行数  
        page_number  页码
  • 修改:/api/apiGateWay/app
  • 参数:
        app_id        应用ID    必填
        app_name      应用名称
        description   APP描述信息
  • 删除:/api/apiGateWay/app
  • 参数:
        app_id        应用ID    必填
        app_name      应用名称
        description   APP描述信息
  • 查询指定app密钥信息(GET):/api/apiGateWay/app/secret/[AppId]
  • 参数:
        AppId        应用ID    必填
  • 重置指定app(应用)密钥(PUT):/api/apiGateWay/app/secret
  • 参数:
        app_key      APP应用的Key    必填
  • 二、API分组+环境
  • 添加:/api/apiGateWay/apiGroup
  • 参数:
        group_name       分组名称       必填    
        description      分组描述
  • 读取:/api/apiGateWay/apiGroup
  • 参数:
        group_id       API分组ID  
        group_name     API组名称
        page_size      每页行数  
        page_number    页码
  • 查询API分组详情(GET):/api/apiGateWay/apiGroup/[groupId]
  • 参数:
        group_id       API分组ID    必填
  • 修改:/api/apiGateWay/apiGroup
  • 参数:
        group_id        API分组ID    必填
        group_name      分组名称
        description     分组描述
  • 删除:/api/apiGateWay/apiGroup
  • 参数:
        group_id        API分组ID    必填
  • 添加API分组环境变量:/api/apiGateWay/apiGroup/env
  • 参数:
        group_id          API分组ID            必填
        stage_id          环境ID               必填
        variable_name     变量名,区分大小写      必填
        variable_value    变量值             
  • 查询API分组环境详情(GET):/api/apiGateWay/apiGroup/env/[groupId]/[stageId]
  • 参数:
        groupId   API分组ID     必填
        stageId   环境ID        必填
  • 删除API分组环境变量:/api/apiGateWay/apiGroup/env
  • 参数:
        group_id          API分组ID            必填
        stage_id          环境ID               必填
        variable_name     变量名,区分大小写      必填
  • 三、VPC授权
  • 添加:/api/apiGateWay/vpc
  • 参数:
        vpc_id        专用网络Id,必须是同账户下可用的专用网络的ID(要先在阿里云api网关的VPC控制台创建)  必填
        instance_id   专用网络中的实例Id(ECS/负载均衡)(要先在阿里云购买ECS服务器)                   必填
        port          实例对应的端口号                                                        必填
        name          自定义授权名称                                                         必填
  • 查询授权的Vpc列表:/api/apiGateWay/vpc
  • 参数:
        page_size      每页行数  
        page_number    页码
  • 撤销授权:/api/apiGateWay/vpc
  • 参数:
        vpc_id        专用网络Id,必须是同账户下可用的专用网络的ID(要先在阿里云api网关的VPC控制台创建)  必填
        instance_id   专用网络中的实例Id(ECS/负载均衡)(要先在阿里云购买ECS服务器)                   必填
        port          实例对应的端口号                                                        必填
  • 四、API
  • 添加:可顺便发布+授权 /api/apiGateWay/api
  • 参数:
        group_id              指定的分组编号                 必填
        api_name              设置API的名称                 必填
        description           API描述信息
        method                请求方法                      必填
                                get-列表
                                get_detail-详情
                                post-添加
                                put-修改
                                delete-删除
        path                  请求路径                      必填
        params                提交的参数                    method不为get/get_detail时,必填
                            例子:
                                列表:[
                                   {"name": "username", "type": "string", "description": "用户名", "is_required": 1},
                                   {"name": "email", "type": "string", "description": "邮箱", "is_required": 1}
                                   ]
                                详情:[
                                   {"name": "id", "type": "int", "description": "ID", "is_required": 1, "is_path":1}
                                   ]
                                添加/修改/删除:
                                    [
                                   {"name": "username", "type": "string", "description": "用户名", "is_required": 1},
                                   {"name": "email", "type": "string", "description": "邮箱", "is_required": 1}
                                   ]
                            name: api名称
                            type: 参数类型 string int long float double boolean
                            description: api描述
                            is_required:0-非必填 1-必填
                            is_path:0-请求详情接口时,非必传的参数(如 www.xxx.com/a?id=]);1-请求详情接口时,必传的参数(如 www.xxx.com/a/[id])
                                  
        authorization         是否需要加Authorization验证    
  
        publish_description   是否需要发布                  不为空-则发布               
        is_authorize          是否需要授权                  不为空-则授权
        app_id                应用ID                      is_authorize不为空-则必填
  • 修改:可顺便发布 /api/apiGateWay/api
  • 参数:
        api_id                API的Id标识                  必填       
        group_id              指定的分组编号                 必填
        api_name              设置API的名称                 必填
        description           API描述信息
        method                请求方法                      必填
                                get-列表
                                get_detail-详情
                                post-添加
                                put-修改
                                delete-删除
        path                  请求路径                      必填
        params                提交的参数                    method不为get/get_detail时,必填
                            例子:
                                列表:[
                                   {"name": "username", "type": "string", "description": "用户名", "is_required": 1},
                                   {"name": "email", "type": "string", "description": "邮箱", "is_required": 1}
                                   ]
                                详情:[
                                   {"name": "id", "type": "int", "description": "ID", "is_required": 1, "is_path":1}
                                   ]
                                添加/修改/删除:
                                    [
                                   {"name": "username", "type": "string", "description": "用户名", "is_required": 1},
                                   {"name": "email", "type": "string", "description": "邮箱", "is_required": 1}
                                   ]
                            name: api名称
                            type: 参数类型 string int long float double boolean
                            description: api描述
                            is_required:0-非必填 1-必填
                            is_path:0-请求详情接口时,非必传的参数(如 www.xxx.com/a?id=]);1-请求详情接口时,必传的参数(如 www.xxx.com/a/[id])
                                  
        authorization         是否需要加Authorization验证    
  
        publish_description   是否需要发布                  不为空-则发布
  • 查询定义中的API列表/查询已发布API列表 /api/apiGateWay/api
  • 参数:
        group_id          指定的分组编号
        stage_name        环境名称                action_type不为空,必填
        api_id            指定的API编号
        api_name          API名称
        page_size         指定分页查询时每页行数
        page_number       指定要查询的页码
        action_type       操作类型            
  • 查询API定义(详情) /api/apiGateWay/api/apiId?group_id=
  • 参数:
        apiId             API的Id标识            必填
        group_id          API所在的分组编号
  • 删除API(单个/多个) /api/apiGateWay/api
  • 参数:
        api_id            API的Id标识            必填(多个用","隔开)
        group_id          API所在的分组编号
  • 发布API(单个/多个) /api/apiGateWay/api/publish
  • 参数:
        api_id            API的Id标识            必填(多个用","隔开)
        group_id          API所在的分组编号
        stage_name        运行环境名称            必填
        description       本次发布备注说明         必填
  • 下线API(单个/多个) /api/apiGateWay/api/offline
  • 参数:
        api_id            API的Id标识            必填(多个用","隔开)
        group_id          API所在的分组编号
        stage_name        运行环境名称            必填
        description       本次发布备注说明         必填
  • 五、API授权
  • 添加:给指定app添加多个API的访问权限(单个/多个api)
  • 参数:
        group_id          API分组ID              api_ids为空,则必填
        stage_name        环境名称                必填
        app_id            应用编号                必填
        api_ids           指定要操作的API编号(支持输入多个,用","隔开)  group_id为空,则必填
        description       授权说明                
        auth_vaild_time   授权有效时间的截止时间
  • 查询授权的Vpc列表:/api/apiGateWay/apiAuthorize
  • 参数:
        app_id         App的唯一标识(应用ID)   action_type为空,则必填
        action_type    操作接口类型  
        page_size      每页行数  
        page_number    页码
  • 撤销授权:/api/apiGateWay/apiAuthorize
  • 参数:
        group_id          API分组ID              
        stage_name        环境名称                必填
        app_id            应用编号                必填
        api_ids           指定要操作的API编号(支持输入多个,用","隔开)  必填

注意

1.Laravel框架的不同版本,在安装其它扩展包时,要求的版本可能不一样,请根据实际情况进行版本的调整

2.接口的更多参数说明和限制,请查看代码

3.该扩展包仅供大家参考使用,请根据各自项目的实际情况,进行修改

4.该扩展包为基础版本,目前适用于使用了VPC通道的api网关,往后有时间再进行升级和完善

5.如果有写的不够好,或者有错误的地方,望各位大神能多给建议

联系方式:QQ邮箱 783973660@qq.com