magic-api-新手教程

magic-api-新手教程 官方地址官方测试项目地址-里面有很多示例最近使用 magic-api框架写接口 由于网上教程太少 遇到了很多问题 在ai帮助下 完成第一个接口项目开发总结一下写接口所用到的代码希望对使用 magic-api 框架的开发者有所帮助。1、引包我自己的pom提供参考log4j 、 mybatis 必须要引入 不然会报错?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.6.7/version relativePath/ /parent groupIdcom.example/groupId artifactIdMagic_Api/artifactId version0.0.1-SNAPSHOT/version namekmskzy/name descriptionkmskzy/description properties java.version1.8/java.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jersey/artifactId version2.7.0/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /exclusion /exclusions /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId scoperuntime/scope optionaltrue/optional /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !-- sql server 数据库-- dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-jdbc/artifactId version6.4.0.jre8/version /dependency !-- oracle 数据库-- dependency groupIdcom.oracle.database.jdbc/groupId artifactIdojdbc8/artifactId version19.21.0.0/version /dependency !-- mybatis - plus -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.3.2/version /dependency !--lombok用来简化实体类需要安装lombok插件-- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.16.10/version /dependency !-- druid 连接池 -- !-- dependency-- !-- groupIdcom.alibaba/groupId-- !-- artifactIddruid/artifactId-- !-- version1.1.12/version-- !-- /dependency-- !-- json 工具包 -- dependency groupIdcom.alibaba/groupId artifactIdfastjson/artifactId version2.0.57/version /dependency dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2/artifactId version2.0.52/version /dependency dependency groupIdorg.json/groupId artifactIdjson/artifactId version20210307/version /dependency dependency groupIdlog4j/groupId artifactIdlog4j/artifactId version1.2.12/version /dependency !--jsonwebtoken 生成token的库 登录验证-- !-- dependency-- !-- groupIdcom.auth0/groupId-- !-- artifactIdjava-jwt/artifactId-- !-- version3.8.3/version-- !-- /dependency-- !-- 签名 DigestUtils-- !-- dependency-- !-- groupIdcommons-codec/groupId-- !-- artifactIdcommons-codec/artifactId-- !-- /dependency-- !-- dependency-- !-- groupIdorg.apache.commons/groupId-- !-- artifactIdcommons-lang3/artifactId-- !-- version3.6/version-- !-- /dependency-- !--发送请求的依赖-- !-- dependency-- !-- groupIdorg.apache.httpcomponents/groupId-- !-- artifactIdhttpclient/artifactId-- !-- version4.5.5/version-- !-- /dependency-- !-- http工具 -- !-- dependency-- !-- groupIdcn.hutool/groupId-- !-- artifactIdhutool-all/artifactId-- !-- version5.7.1/version-- !-- /dependency-- !-- Magic-API -- dependency groupIdorg.ssssssss/groupId artifactIdmagic-api-spring-boot-starter/artifactId version2.2.1/version /dependency !-- Magic-API 定时任务 -- dependency groupIdorg.ssssssss/groupId artifactIdmagic-api-plugin-task/artifactId version2.2.1/version /dependency !-- 加载本地驱动-- !-- dependency-- !-- groupIdorg.bouncycastle/groupId-- !-- artifactIdbcpkix-jdk15on-1.62/artifactId-- !-- version1.62/version-- !-- scopesystem/scope-- !-- systemPath${project.basedir}/src/main/resources/lib/bcpkix-jdk15on-1.62.jar/systemPath-- !-- /dependency-- dependency groupIdorg.springframework/groupId artifactIdspring-test/artifactId /dependency dependency groupIdjunit/groupId artifactIdjunit/artifactId scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project2、配置文件-参数设置我自己使用的 application.properties文件 yml参数名称一样 只是结构不同 登录 账号 密码 路径 建议配置复杂一些 比较安全 官方建议正式环境删除配置 magic-api.security.usernameadmin magic-api.security.password123456 magic-api.web/skzy/web配置接口备份表magic-api.backup.enabletrue magic-api.backup.table-namemagic_api #表名 按下面脚本 字段创建即可 magic-api.backup.max-history-1# oracle 建表语句 提供参考 CREATE TABLE magic_api( ID VARCHAR2(32), CREATE_DATE NUMBER(38,0), TAG VARCHAR2(50), TYPE VARCHAR2(50), NAME VARCHAR2(100), CREATE_BY VARCHAR2(50), CONTENT CLOB );官方配置说明3、 登录启动成功 程序会打印出登录地址 如下图注意这里打印的端口是 application.properties 里面指定的 正式部署在tomcat后 端口要换成tomcat配置的端口界面截图4、新增接口1、先创建分组2、分组下创建接口填写接口名称 接口路径5、数据库交互官方文档-数据库交互1、查询sql// 查询sql //db 模块会自动导入 直接调用即可 var user_list db.select( select username,userid from userdoc where rownum 5 ); return user_list;通过地址接口路径即可请求到数据 idhttp://192.168.80.110:6080/test12、调用过程2.1oracle返回游标的过程--过程 CREATE OR REPLACE PROCEDURE DHERP_TF.dev_test1234( p_cursor OUT SYS_REFCURSOR, p_goodsname IN varchar2 ) AS BEGIN OPEN p_cursor FOR SELECT entid, entname FROM entdoc WHERE entname LIKE p_goodsname ; END;//调用过程返回游标 oracle // 出参格式 {参数名, java.sql.Types的类型字符串} , {LIST,REF_CURSOR} LIST:返回报文key值 可以任意命名 REF_CURSOR:出参类型游标 若返回的是字符型写VARCHAR // 入参格式 import db; var name %数据%; //入参变量 #{name} 占位符方式 var sql BEGIN dev_test1234({LIST,REF_CURSOR}, #{name} ); END; //入参变量 ${name} 字符串拼接方式 var sql BEGIN dev_test1234({LIST,REF_CURSOR},${name}); END; return db.call(sql);2.2sql server返回查询CREATE PROCEDURE [dbo].[test2] --测试过程 con VARCHAR(500)NULL AS BEGIN SELECT 过程测试 AS 名称, 001 编号 SELECT 过程测试2 AS 名称, 002 编号 ENDreturn db.call( EXEC test2 , );过程有多个查询会返回多个集合sql server 带返回参数的ALTER PROCEDURE [dbo].[test2] con VARCHAR(500)NULL, out_msg VARCHAR(1000) OUTPUT , out_msg2 VARCHAR(1000) OUTPUT AS BEGIN IF ISNULL(con ,) BEGIN SET out_msg out_msg过程测试1 SET out_msg2 out_msg2过程测试1 END ELSE BEGIN SET out_msg out_msg过程测试2 SET out_msg2 out_msg2过程测试2 END ENDreturn db.call( exec test2 #{aa}, {out_msg(),varchar}, {out_msg2(),varchar} --返会参数 指定数据类型 ); return db.call( exec test2 #{aa}, {out_msg()}, {out_msg2()} --不指定也可以 );带返回值的 也不妨碍 SELECT 数据输出6、调用java代码需要签名或者调用集成jar包的接口 可以调用java类实现 1、调用静态方法时间转 为带时区的格式public static String zonedDateTime ( String date) { // 定义输入格式 DateTimeFormatter inputFormatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); // 解析为 LocalDateTime LocalDateTime localDateTime LocalDateTime.parse(date, inputFormatter); // 假设这个时间是东八区北京时间 ZoneId beijingZone ZoneId.of(Asia/Shanghai); ZonedDateTime zonedDateTime ZonedDateTime.of(localDateTime, beijingZone); // 输出为 ISO 8601 带时区格式 DateTimeFormatter outputFormatter DateTimeFormatter.ISO_OFFSET_DATE_TIME; // 默认就是 ISO_OFFSET_DATE_TIME String result zonedDateTime.format(outputFormatter); return result; }2、调用普通方法//java代码 package com.example.kmskzy.util; import org.springframework.stereotype.Service; import java.util.Map; Service public class test{ public Map test2(Map str ){ System.out.println(str); return str; } }普通方法需要 new7、发送http请求数据库取数 、取数拼接报文 、发送请求 代码如下 有详细注释import http; import log; var inter_name 获取职员; //接口名称 打印报文使用 // 查询sql var db_list db.select( select entid,staffid,staffname from staffdoc where rownum 2 ); if (db_list.getLength() 0) { log.info(inter_name -没有待上传数据); return db_list; } //报文拼接 // sql 取数 oracle字段字段名称转大写 需要大写才能去到值 var data { //汇总取第一条数据 db_list[0] MT: db_list[0].ENTID, //明细 DT: db_list.map(item ({ // 循环取 明细 FSKMatNum: item.STAFFID, FSKMatName: item.STAFFNAME })) } /* data 格式如下 { MT: E4C467FWITA, DT: [{ FSKMatNum: K4C467F9YBY, FSKMatName: 系统管理员1 }, { FSKMatNum: H0000000055, FSKMatName: 魏涛 }] } */ log.info(inter_name -入参 data::stringify); // 日志输出 json 转字符串 data::stringify 不转打印出出来是 map格式 try{ var url http//:127.0.0.1:8080/user; //接口地址 var response http.connect(url) .contentType(application/json) //报文格式 json 表单格式application/x-www-form-urlencoded // .head() // 请求头 若没有不需要写 .body(data) // 请求体 传报文 --.data(data) //表单格式 在这里传参数 .post() // 接口方式 get/post .getBody(); // 获取请求到的数据 log.info(inter_name-反参response::stringify); // 日志输出 json 转字符串 data::stringify 不转打印出出来是 map格式 // 请求成功 回写传输状态 if (response.code 1){ // 状态 根据接口实际情况判断 //拼接sql 更新单据状态 var sql_up UPDATE staffdoc SET zt Y WHERE ENTID ${db_list[0].ENTID} -- ${}取变量不带引号的 字符串的需要加${} ; db.update(sql_up); } return response; }catch(e){ // 发生异常会走这一段 打印异常信息 log.info(inter_name-反参e.getMessage()); // 日志输出 json 转字符串 data::stringify 不转打印出出来是 map格式 return e.getMessage(); }8、接收http请求按下图设置 请求方法 、接口名称 、接口路径设置请求参数、请求头、请求body1、请求参数设置若需要必填拦截 请不要录入默认值 2、请求头设置与请求参数类似3、请求体请求体是测试使用 不可以设置必填、验证需要拦截请在代码里面编写逻辑 4、请求信息获取请求参数 直接写请求参数名称即可获取请求头 header.XXX 即可获取具体的参数请求头 body.xxx 即可获取取具体的参数return { prams1: prams1, // 请求参数 prams2: prams2, // 请求参数 header :header,// 请求头 Body: body// 请求体 }5、请求示例通过商品编号获取库存信息6、body 请求参数拦截 示例import response; if (body.goodscode null ) { return response.json({ success : 0, message : goodscode必填, data: [], timestamp: new Date().getTime(), executeTime: 1 }); } return db.select( select b.goodsname,b.goodscode,b.GOODSSPEC , a.goodsid,a.PLACENUM from OGBALANCE a JOIN goodsdoc b ON a.entid b.entid AND a.goodsid b.goodsid where rownum 500 and b.goodscode ${body.goodscode} )9、定时任务按下图 新增分组 - 新增定时任务启用勾选 填写 Cron表达式、任务名称、任务路径import get:/test_java as test_java; //get、post 代表get请求 post请求 后面是调用的接口路径 test_java();10、接口文件存放位置 工作目录配置文件 增加 magic-api.resource.location#接口存盘位置 magic-api.resource.location: D:/data/magic-api不配置会有个默认路径 启动项目会打印出来 11、中文乱码处理我自己电脑没乱码 放到服务器乱了 接口都没法保存 不乱码就不改改了黑窗口打印日志会乱码1、wnindows环境 tomcat\bin\catalina.bat 文件 加入set JAVA_OPTS%JAVA_OPTS% -Dfile.encodingUTF-82、linux环境 tomcat\bin\catalina.sh 文件 加入export JAVA_OPTS$JAVA_OPTS -Dfile.encodingUTF-82025-12月改