Api管家系列(一):初探
前段时间发现一个很好用的API管理工具--API管家,用了一段时间,已经感觉离不开了,抱着分享使我快乐的想法,因为刚开始用的时候随便写过一篇简介,不是很详细,所以现在就重新写,把我这段时间使用的经验和大家一起讨论。
进入正题:打开浏览器,输入www.apigj.com 来到首页,接下来自然是登录或注册了
创建一个新账号,成功后会来到项目列表界面,会提示是否需要创建示例项目,点击确定后,就会创建一个新的项目出来
点击进入示例项目,示例项目一共有1个文件夹和5个接口,可以看到没有经过测试,都在未测试状态
点击某个接口,接口文档就显示出来了,有请求的URL,版本号,描述,请求方式,参数等等,左上角是对接口的操作按扭
点击编辑,可以看到编辑接口的界面,注意我红色圈出的位置是个tab控件,可以点击切换编辑的内容
把请求Class的openid直接删除,点击保存
回到接口文档页面,可以看到openid已经从请求Class里消失了,这里还有个特别的功能,我用红色图出了,点击会生成mock参数
点击左上角的生成按扭,这里就是Api管家最大特色了,可以直接生成代码
点击生成代码,会出现语言的选项,一共9种语言,对我来说是足够用了
举个栗子,我常用的Java(咖啡杯),又分3种引入包
选择Gson
请求和返回的Class文件就直接生成了,值的提一下的是ResSendSms继承于ResCommon,这个是在文档中编辑的,下次再展开细说编辑的功能
上生成的代码,里面自动带了文档中的描述作为注释,实在是太方便了
- /***
- * @接口:SendSMS
- * @URL:host + /sendsms
- * @编码:www.apigj.com
- * @版本号:1.1
- ***/
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import com.google.gson.TypeAdapter;
- import com.google.gson.annotations.JsonAdapter;
- import com.google.gson.annotations.SerializedName;
- import com.google.gson.stream.JsonReader;
- import com.google.gson.stream.JsonWriter;
- @JsonAdapter(ReqSendSms.ReqSendSmsTypeAdapter.class)
- public class ReqSendSms {
- // 类型版本,用于查询类型是否已过期
- public static final int Version = 2;
- /***
- * 参数描述:用户手机号
- * 是否可为空:否
- ***/
- @SerializedName("mobile")
- private String mobile;
- public String getMobile(){
- return mobile;
- }
- public void setMobile(String mobile){
- this.mobile = mobile;
- }
- /***
- * 检查类型完整性
- *
- * @return true代表类型通过完整性检查
- ***/
- public boolean checkVarRequire() {
- if(getMobile() == null){
- System.out.println("Lake of (mobile)");
- return false;
- }
- return true;
- }
- public static class ReqSendSmsTypeAdapter<T> extends TypeAdapter<ReqSendSms> {
- @Override
- public void write(JsonWriter out, ReqSendSms value) throws IOException {
- out.beginObject();
- writeOBJ(out, (ReqSendSms)value);
- out.endObject();
- }
- protected void writeOBJ(JsonWriter out, ReqSendSms value) throws IOException {
- out.name("mobile").value(value.getMobile());
- }
- @Override
- public ReqSendSms read(JsonReader in) throws IOException {
- ReqSendSms res = new ReqSendSms();
- in.beginObject();
- while (in.hasNext()) {
- String propertyName = in.nextName();
- if(!readOBJ(res, in, propertyName)) {
- in.skipValue();
- }
- }
- in.endObject();
- return res;
- }
- protected boolean readOBJ(ReqSendSms res, JsonReader in, String propertyName) throws IOException {
- if (propertyName.equals("mobile")) {
- try {
- res.setMobile(in.nextString());
- } catch(IllegalStateException e) {in.skipValue();}
- return true;
- }
- return false;
- }
- }
- }
请求类 ReqSendSms.java
- /***
- * @接口:SendSMS
- * @URL:host + /sendsms
- * @编码:www.apigj.com
- * @版本号:1.1
- ***/
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import com.google.gson.TypeAdapter;
- import com.google.gson.annotations.JsonAdapter;
- import com.google.gson.annotations.SerializedName;
- import com.google.gson.stream.JsonReader;
- import com.google.gson.stream.JsonWriter;
- @JsonAdapter(ResCommon.ResCommonTypeAdapter.class)
- public class ResCommon {
- // 类型版本,用于查询类型是否已过期
- public static final int Version = 1;
- /***
- * 参数描述:返回码
- * 是否可为空:否
- ***/
- @SerializedName("code")
- private Integer code;
- public Integer getCode(){
- return code;
- }
- public void setCode(Integer code){
- this.code = code;
- }
- /***
- * 参数描述:返回提示
- * 是否可为空:是
- ***/
- @SerializedName("msg")
- private String msg;
- public String getMsg(){
- return msg;
- }
- public void setMsg(String msg){
- this.msg = msg;
- }
- /***
- * 检查类型完整性
- *
- * @return true代表类型通过完整性检查
- ***/
- public boolean checkVarRequire() {
- if(getCode() == null){
- System.out.println("Lake of (code)");
- return false;
- }
- return true;
- }
- public static class ResCommonTypeAdapter<T> extends TypeAdapter<ResCommon> {
- @Override
- public void write(JsonWriter out, ResCommon value) throws IOException {
- out.beginObject();
- writeOBJ(out, (ResCommon)value);
- out.endObject();
- }
- protected void writeOBJ(JsonWriter out, ResCommon value) throws IOException {
- out.name("code").value(value.getCode());
- out.name("msg").value(value.getMsg());
- }
- @Override
- public ResCommon read(JsonReader in) throws IOException {
- ResCommon res = new ResCommon();
- in.beginObject();
- while (in.hasNext()) {
- String propertyName = in.nextName();
- if(!readOBJ(res, in, propertyName)) {
- in.skipValue();
- }
- }
- in.endObject();
- return res;
- }
- protected boolean readOBJ(ResCommon res, JsonReader in, String propertyName) throws IOException {
- if (propertyName.equals("code")) {
- try {
- res.setCode(in.nextInt());
- } catch(IllegalStateException e) {in.skipValue();}
- return true;
- }
- else if (propertyName.equals("msg")) {
- try {
- res.setMsg(in.nextString());
- } catch(IllegalStateException e) {in.skipValue();}
- return true;
- }
- return false;
- }
- }
- }
返回类的父类 ResCommon.java
- /***
- * @接口:SendSMS
- * @URL:host + /sendsms
- * @编码:www.apigj.com
- * @版本号:1.1
- ***/
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import com.google.gson.TypeAdapter;
- import com.google.gson.annotations.JsonAdapter;
- import com.google.gson.annotations.SerializedName;
- import com.google.gson.stream.JsonReader;
- import com.google.gson.stream.JsonWriter;
- @JsonAdapter(ResSendSms.ResSendSmsTypeAdapter.class)
- public class ResSendSms extends ResCommon {
- // 类型版本,用于查询类型是否已过期
- public static final int Version = 2;
- /***
- * 参数描述:事件ID,记录接收短信的用户
- * 是否可为空:否
- ***/
- @SerializedName("eventid")
- private String eventid;
- public String getEventid(){
- return eventid;
- }
- public void setEventid(String eventid){
- this.eventid = eventid;
- }
- /***
- * 检查类型完整性
- *
- * @return true代表类型通过完整性检查
- ***/
- public boolean checkVarRequire() {
- if(!super.checkVarRequire()){
- return false;
- }
- if(getEventid() == null){
- System.out.println("Lake of (eventid)");
- return false;
- }
- return true;
- }
- public static class ResSendSmsTypeAdapter<T> extends ResCommonTypeAdapter<ResSendSms> {
- @Override
- public void write(JsonWriter out, ResCommon value) throws IOException {
- out.beginObject();
- writeOBJ(out, (ResSendSms)value);
- out.endObject();
- }
- protected void writeOBJ(JsonWriter out, ResSendSms value) throws IOException {
- super.writeOBJ(out, value);
- out.name("eventid").value(value.getEventid());
- }
- @Override
- public ResSendSms read(JsonReader in) throws IOException {
- ResSendSms res = new ResSendSms();
- in.beginObject();
- while (in.hasNext()) {
- String propertyName = in.nextName();
- if(!readOBJ(res, in, propertyName)) {
- in.skipValue();
- }
- }
- in.endObject();
- return res;
- }
- protected boolean readOBJ(ResSendSms res, JsonReader in, String propertyName) throws IOException {
- if (super.readOBJ(res, in, propertyName)) {
- return true;
- }else
- if (propertyName.equals("eventid")) {
- try {
- res.setEventid(in.nextString());
- } catch(IllegalStateException e) {in.skipValue();}
- return true;
- }
- return false;
- }
- }
- }
返回类 ResSendSms.java
具体请求返回代码还是要自己写的,希望API管家继续完善,以后也可以自动生成把URL和请求方法,请求头包括进去,那就更完美了(懒癌又发作了)。。。
Api管家系列(一):初探的更多相关文章
- Api管家系列(三):测试和Rest Client
今天我们来看一下Api管家的测试功能 在项目首页可以看到,测试过的接口和未测试的接口,点击环型图能列出相应的接口 我们选择未测试的,这些接口我都已经实现好了,只是没有用API管家进行测试,所以还显示未 ...
- Api管家系列(二):编辑和继承Class
上篇写了个大概,今天我详细说一下参数的编辑,废话不多说 先打开一个项目,我要特别说一下设置里的“默认参数设置” 打开默认参数设置,这里我用红色圈出的tab可以设置请求头,返回头和返回状态,这些设置会在 ...
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)
不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...
- 淘宝API开发系列---阿里.聚石塔.开放平台的使用
好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...
- ASP.NET Web API实践系列04,通过Route等特性设置路由
ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...
- 构建安全的Xml Web Service系列之初探使用Soap头
原文:构建安全的Xml Web Service系列之初探使用Soap头 Xml Web Service 从诞生那天就说自己都么都么好,还津津乐道的说internet也会因此而进入一个新纪元,可5年多来 ...
- 循序渐进学.Net Core Web Api开发系列【0】:序言与目录
一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...
随机推荐
- 【机器学习】使用gensim 的 doc2vec 实现文本相似度检测
环境 Python3, gensim,jieba,numpy ,pandas 原理:文章转成向量,然后在计算两个向量的余弦值. Gensim gensim是一个python的自然语言处理库,能够将文档 ...
- nginx常用配置系列-虚拟主机
本来准备详尽的出一份nginx配置讲解,但nginx功能配置繁多,平常使用中使用最多的一般有: 1. 虚拟主机配置 2. HTTPS配置 3. 静态资源处理 4. 反向代理 ============= ...
- 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...
- 调用约定__cdecl __fastcall与__stdcall
__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以 ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- PAT1102: Invert a Binary Tree
1102. Invert a Binary Tree (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- Linux共享库、静态库、动态库详解
1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用.程序函数库 ...
- Spring cloud整体框架
研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...
- vue学习之响应式原理的demo实现
Vue.js 核心: 1.响应式的数据绑定系统 2.组件系统. 访问器属性 访问器属性是对象中的一种特殊属性,它不能直接在对象中设置,而必须通过 defineProperty() 方法单独定义. va ...
- handler.go
{ w.WriteHeader(http.StatusAccepted) } else { errStr := "" for ...