apisix 开发公共对外接口

apisix 开发公共对外接口

1 背景

公司网关改造,使用 Apisix 替换原有的 Springcloud Gateway,原来网关上自带了一个接口

逻辑比较简单,配置文件中有一个开关:

  • 值为 true,则返回
{"status": 200,"message": "分享登录开关打开","data": true,"rel": true
}
  • 值为 false,则返回
{"status": 200,"message": "分享登录开关关闭","data": false,"rel": true
}

希望保留原有逻辑,将该接口编写在 Apisix 中(当然,可以随便找个服务,补充这个接口,然后路由到上面,但是这里不想破坏原有逻辑)

2 资料分析

查看官网资料可以看到,Apisix 可以通过 public-api 插件对外暴露接口

但是开启插件必须要与授权插件一起使用,orz___

image-20230917172126607

只能通过自己的方式绕过它了

3 插件开发

这里开发一个 名为 api-test 的插件,用于对外公开一个接口

local ngx = ngx
local core = require("apisix.core")
local consumer_mod = require("apisix.consumer")local schema = {type = "object",properties = {},
}local consumer_schema = {type = "object",properties = {key = { type = "string" },switch = {type = "boolean",default = false},},required = {"key"},
}local plugin_name = "api-test"local _M = {version = 0.1,priority = 35,type = 'auth',name = plugin_name,schema = schema,consumer_schema = consumer_schema
}function _M.check_schema(conf)if schema_type == core.schema.TYPE_CONSUMER thenreturn core.schema.check(consumer_schema, conf)elsereturn core.schema.check(schema, conf)end
endlocal function getSwitch()local consumer_conf = consumer_mod.plugin(plugin_name)if not consumer_conf thenreturn core.response.exit(404)endlocal consumers = consumer_mod.consumers_kv(plugin_name, consumer_conf, "key")local consumer = consumers[plugin_name]if not consumer thenreturn core.response.exit(401, "Consumer Key Should Be Equal To Plugin Name")endlocal switch_flag = consumer.auth_conf.switchcore.log.warn("consumer_conf: ", switch_flag)local tbl = { status = 200 , rel = true }if switch_flag thentbl["message"] = "分享登录开关打开"tbl["data"] = trueelsetbl["message"] = "分享登录开关关闭"tbl["data"] = falseendreturn core.response.exit(200, core.json.encode(tbl))
endfunction _M.api()return {{methods = {"GET"},uri = "/switch/getSwitch",handler = getSwitch,}}
endreturn _M

核心代码,这里需要保证 consumer 的名称与插件名称相同即可通过校验

local consumer = consumers[plugin_name]

4 部署与测试

添加自定义插件可以参考:apisix 开发自定义插件

  • 添加 消费者
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H 'X-API-KEY: <your-key>' -X PUT -d '
{"username": "api-test","plugins": {"api-test": {"key": "api-test","switch": true}}
}'
  • 添加路由
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/r1' \-H 'X-API-KEY: <your-key>' \-H 'Content-Type: application/json' \-d '{"uri": "/switch/getSwitch","plugins": {"public-api": {}}
}'
  • 插件重载

如果需要改动 lua 脚本,可以通过以下指令 热加载

curl http://127.0.0.1:9180/apisix/admin/plugins/reload -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT

然后就可以测试接口了

curl 'http://127.0.0.1:9080/switch/getSwitch'

返回结果

{"status": 200,"message": "分享登录开关打开","rel": true,"data": true
}

5 参考资料

注册公共接口

public-api插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134770.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关18关 | 回溯模板如何解决排列和单词搜索问题

1. 排列问题 题目 LeetCode46 给定一个没有重复数字的序列&#xff0c;返回其所有可能的全排列&#xff0c; 思路 排列问题的思路同样使用与字母大小写全排列LeetCode784。 元素在使用过一次的时候&#xff0c;在图中第二层的时候&#xff0c;还会再被使用&#xff0c;所以能…

《动手学深度学习 Pytorch版》 6.6 卷积神经网络

import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成&#xff1a; - 卷积编码器&#xff1a;由两个卷积核组成。 - 全连接层稠密块&#xff1a;由三个全连接层组成。模型结构如下流程图&#xff08;每个卷积块由一个卷积层、…

【C语言】【数据存储】用%u打印char类型?用char存128?

1.题目一&#xff1a; #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }%u 是打印无符号整型 解题逻辑&#xff1a; 1. 原反补互换&#xff0c;截断 -128 原码&#xff1a;10000000…10000000 补码&#xff1a;11111111…10000000…

【深度学习】 Python 和 NumPy 系列教程(廿五):Matplotlib详解:3、多子图和布局:subplot()函数

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 简单示例 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0c;并且具有强大的功能…

vue修改node_modules打补丁步骤和注意事项

当我们使用 npm 上的第三方依赖包&#xff0c;如果发现 bug 时&#xff0c;怎么办呢&#xff1f; 想想我们在使用第三方依赖包时如果遇到了bug&#xff0c;通常解决的方式都是绕过这个问题&#xff0c;使用其他方式解决&#xff0c;较为麻烦。或者给作者提个issue&#xff0c;然…

大数据-玩转数据-Flink状态后端(下)

一、状态后端 每传入一条数据&#xff0c;有状态的算子任务都会读取和更新状态。由于有效的状态访问对于处理数据的低延迟至关重要&#xff0c;因此每个并行任务(子任务)都会在本地维护其状态&#xff0c;以确保快速的状态访问。 状态的存储、访问以及维护&#xff0c;由一个…

机器学习 day35(决策树)

决策树 上图的数据集是一个特征值X采用分类值&#xff0c;即只取几个离散值&#xff0c;同时也是一个二元分类任务&#xff0c;即标签Y只有两个值 上图为之前数据集对应的决策树&#xff0c;最顶层的节点称为根节点&#xff0c;椭圆形节点称为决策节点&#xff0c;矩形节点称…

flutter简单的本地草稿箱功能

需求1&#xff1a;发帖退出时提示是否保存草稿 需求2&#xff1a;每条草稿中可以保存多张图片(最多9张)或一条视频及三十来个其它参数 需求3&#xff1a;每条草稿都是可以被覆盖的、可以点击删除 需求4&#xff1a;草稿页面可以一键清空 需求5&#xff1a;草稿随app删除一起没掉…

Linux学习第14天:Linux设备树(一):枝繁叶茂见晴天

本节笔记主要学习了Linux设备树相关知识点&#xff0c;由于内容较多&#xff0c;打算分两天进行总结。今天着重学习Linux设备树&#xff0c;主要包括前三节内容&#xff0c;分别是概念、格式和语法。 本节思维导图内容如下&#xff1a; 一、什么是设备树 设备树可以用一个图来进…

基于Gradio/Stable Diffusion/Midjourney的AIGC自动图像绘画生成软件 - Fooocus

0.参考 本项目&#xff1a;GitHub - lllyasviel/Fooocus: Focus on prompting and generating 作者&#xff1a;Lvmin Zhang ​编辑 lllyasviel 另一杰作 ContorlNet https://github.com/lllyasviel/ControlNet 模型&#xff1a;https://huggingface.co/stabilityai/stab…

WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台

自国家于2022年发布的《关于加强数字政府建设的指导意见》以来&#xff0c;我国数字政府建设已经迈入了一个全新的里程碑&#xff0c;迎来了全面改革和深化升级的全新阶段。 WorkPlus作为自主可控、可信安全、专属定制的数字化平台&#xff0c;扮演着政务机关、政府单位以及各…

c语言输出杨辉三角

#include<stdio.h> int main() {int x 0; //表示杨辉三角的的大小int y 1;printf("请输入x的值: ");scanf("%d", &x);for (int i 0; i < x; i) {for (int j 0; j < i; j) {if (j 0 || i 0) {y 1;}else {y y * (i - j 1) / j;}pri…

Git分布式版本控制工具

概念 Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使用。 开发中的实际场景 1.备份 2.代码还原 3.协同开发 4.追溯问题代码的编写人和编写时间 …

每日一题(两数相加)

每日一题&#xff08;两数相加&#xff09; 2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 思路 思路&#xff1a; 由于链表从头开始向后存储的是低权值位的数据&#xff0c;所以只需要两个指针p1和p2&#xff0c;分别从链表的头节点开始遍历。同时创建一个新的指针new…

QT基础教程(对话框1)

文章目录 前言一、对话框概念二、模态对话框三、非模态对话框总结 前言 本篇文章我们来讲解QT中的对话框。 资料合集地微信公众号&#xff1a;优质程序猿一、对话框概念 在Qt中&#xff0c;对话框&#xff08;Dialog&#xff09;是一种用于与用户进行交互、收集输入或展示信…

常用的辅助类(必会)

1.CountDownLatch package com.kuang.add;import java.util.concurrent.CountDownLatch;//计数器 减法 public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//总数是6&#xff0c;必须要执行任务的时候&#xff0c;再使用…

第6篇 vue的打包工具webpack

一 webpack 1.1 webpack的作用 webpack是一个打包工具&#xff0c;可以把多个静态资源文件打包成一个文件。如图所示&#xff1a; 1.2 版本依赖对照关系 PS E:\vue-project\vue-demo0902\wp-demo> npm -v 6.4.1 PS E:\vue-project\vue-demo0902\wp-demo> node -v v10.…

GB28181学习(五)——实时视音频点播(信令传输部分)

要求 实时视音频点播的SIP消息应通过本域或其他域的SIP服务器进行路由、转发&#xff0c;目标设备的实时视音频流宜通过本域的媒体服务器进行转发&#xff1b;采用INVITE方法实现会话连接&#xff0c;采用RTP/RTCP协议实现媒体传输&#xff1b;信令流程分为客户端主动发起和第…

肖sir__mysql之多表练习题__007

已知2张基本表&#xff1a;部门表&#xff1a;dept &#xff08;部门号&#xff0c;部门名称&#xff09;;员工表 emp&#xff08;员工号&#xff0c;员工姓名&#xff0c;年龄&#xff0c;入职时间&#xff0c;收入&#xff0c;部门号&#xff09; 1&#xff1a;dept表中有4条…

Linux C++ OpenVINO 物体检测 Demo

目录 main.cpp #include <iostream> #include <string> #include <vector> #include <openvino/openvino.hpp> #include <opencv2/opencv.hpp> #include <dirent.h> #include <stdio.h> #include <time.h> #include …