1. 程式人生 > >Api管家系列(一):初探

Api管家系列(一):初探

ima over 管理工具 apt cli 通過 dap 包括 快樂

前段時間發現一個很好用的API管理工具--API管家,用了一段時間,已經感覺離不開了,抱著分享使我快樂的想法,因為剛開始用的時候隨便寫過一篇簡介,不是很詳細,所以現在就重新寫,把我這段時間使用的經驗和大家一起討論。

進入正題:打開瀏覽器,輸入www.apigj.com 來到首頁,接下來自然是登錄或註冊了

技術分享圖片

創建一個新賬號,成功後會來到項目列表界面,會提示是否需要創建示例項目,點擊確定後,就會創建一個新的項目出來

技術分享圖片

技術分享圖片

點擊進入示例項目,示例項目一共有1個文件夾和5個接口,可以看到沒有經過測試,都在未測試狀態

技術分享圖片

點擊某個接口,接口文檔就顯示出來了,有請求的URL,版本號,描述,請求方式,參數等等,左上角是對接口的操作按扭

技術分享圖片

點擊編輯,可以看到編輯接口的界面,註意我紅色圈出的位置是個tab控件,可以點擊切換編輯的內容

技術分享圖片

把請求Class的openid直接刪除,點擊保存

技術分享圖片

回到接口文檔頁面,可以看到openid已經從請求Class裏消失了,這裏還有個特別的功能,我用紅色圖出了,點擊會生成mock參數

技術分享圖片

技術分享圖片

點擊左上角的生成按扭,這裏就是Api管家最大特色了,可以直接生成代碼

技術分享圖片

點擊生成代碼,會出現語言的選項,一共9種語言,對我來說是足夠用了

技術分享圖片

舉個栗子,我常用的Java(咖啡杯),又分3種引入包

技術分享圖片

選擇Gson

技術分享圖片

請求和返回的Class文件就直接生成了,值的提一下的是ResSendSms繼承於ResCommon,這個是在文檔中編輯的,下次再展開細說編輯的功能

上生成的代碼,裏面自動帶了文檔中的描述作為註釋,實在是太方便了

技術分享圖片
 1 /***
 2  * @接口:SendSMS
 3  * @URL:host + /sendsms
 4  * @編碼:www.apigj.com
 5  * @版本號:1.1
 6  ***/
 7 
 8 import java.io.IOException;
 9 import java.util.ArrayList;
10 import java.util.List;
11 
12 import com.google.gson.TypeAdapter;
13 import com.google.gson.annotations.JsonAdapter;
14 import com.google.gson.annotations.SerializedName; 15 import com.google.gson.stream.JsonReader; 16 import com.google.gson.stream.JsonWriter; 17 18 @JsonAdapter(ReqSendSms.ReqSendSmsTypeAdapter.class) 19 public class ReqSendSms { 20 // 類型版本,用於查詢類型是否已過期 21 public static final int Version = 2; 22 23 /*** 24 * 參數描述:用戶手機號 25 * 是否可為空:否 26 ***/ 27 @SerializedName("mobile") 28 private String mobile; 29 public String getMobile(){ 30 return mobile; 31 } 32 public void setMobile(String mobile){ 33 this.mobile = mobile; 34 } 35 36 /*** 37 * 檢查類型完整性 38 * 39 * @return true代表類型通過完整性檢查 40 ***/ 41 public boolean checkVarRequire() { 42 if(getMobile() == null){ 43 System.out.println("Lake of (mobile)"); 44 return false; 45 } 46 return true; 47 } 48 49 public static class ReqSendSmsTypeAdapter<T> extends TypeAdapter<ReqSendSms> { 50 @Override 51 public void write(JsonWriter out, ReqSendSms value) throws IOException { 52 out.beginObject(); 53 writeOBJ(out, (ReqSendSms)value); 54 out.endObject(); 55 } 56 57 protected void writeOBJ(JsonWriter out, ReqSendSms value) throws IOException { 58 out.name("mobile").value(value.getMobile()); 59 } 60 61 @Override 62 public ReqSendSms read(JsonReader in) throws IOException { 63 ReqSendSms res = new ReqSendSms(); 64 in.beginObject(); 65 while (in.hasNext()) { 66 String propertyName = in.nextName(); 67 if(!readOBJ(res, in, propertyName)) { 68 in.skipValue(); 69 } 70 } 71 in.endObject(); 72 return res; 73 } 74 75 protected boolean readOBJ(ReqSendSms res, JsonReader in, String propertyName) throws IOException { 76 if (propertyName.equals("mobile")) { 77 try { 78 res.setMobile(in.nextString()); 79 } catch(IllegalStateException e) {in.skipValue();} 80 return true; 81 } 82 return false; 83 } 84 85 } 86 87 }
請求類 ReqSendSms.java 技術分享圖片
  1 /***
  2  * @接口:SendSMS
  3  * @URL:host + /sendsms
  4  * @編碼:www.apigj.com
  5  * @版本號:1.1
  6  ***/
  7 
  8 import java.io.IOException;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 
 12 import com.google.gson.TypeAdapter;
 13 import com.google.gson.annotations.JsonAdapter;
 14 import com.google.gson.annotations.SerializedName;
 15 import com.google.gson.stream.JsonReader;
 16 import com.google.gson.stream.JsonWriter;
 17 
 18 @JsonAdapter(ResCommon.ResCommonTypeAdapter.class)
 19 public class ResCommon {
 20     // 類型版本,用於查詢類型是否已過期
 21     public static final int Version = 1;
 22 
 23     /***
 24      * 參數描述:返回碼
 25      * 是否可為空:否
 26     ***/
 27     @SerializedName("code")
 28     private Integer code;
 29     public Integer getCode(){
 30         return code;
 31     }
 32     public void setCode(Integer code){
 33         this.code = code;
 34     }
 35 
 36     /***
 37      * 參數描述:返回提示
 38      * 是否可為空:是
 39     ***/
 40     @SerializedName("msg")
 41     private String msg;
 42     public String getMsg(){
 43         return msg;
 44     }
 45     public void setMsg(String msg){
 46         this.msg = msg;
 47     }
 48 
 49     /***
 50      * 檢查類型完整性
 51      *
 52      * @return true代表類型通過完整性檢查 
 53     ***/
 54     public boolean checkVarRequire() {
 55         if(getCode() == null){
 56             System.out.println("Lake of (code)");
 57             return false;
 58         }
 59         return true;
 60     }
 61 
 62     public static class ResCommonTypeAdapter<T> extends TypeAdapter<ResCommon> {
 63         @Override
 64         public void write(JsonWriter out, ResCommon value) throws IOException {
 65             out.beginObject();
 66             writeOBJ(out, (ResCommon)value);
 67             out.endObject();
 68         }
 69 
 70         protected void writeOBJ(JsonWriter out, ResCommon value) throws IOException {
 71             out.name("code").value(value.getCode());
 72             out.name("msg").value(value.getMsg());
 73         }
 74 
 75         @Override
 76         public ResCommon read(JsonReader in) throws IOException {
 77             ResCommon res = new ResCommon();
 78             in.beginObject();
 79             while (in.hasNext()) {
 80                 String propertyName = in.nextName();
 81                 if(!readOBJ(res, in, propertyName)) {
 82                     in.skipValue();
 83                 }
 84             }
 85             in.endObject();
 86             return res;
 87         }
 88 
 89         protected boolean readOBJ(ResCommon res, JsonReader in, String propertyName) throws IOException {
 90             if (propertyName.equals("code")) {
 91                 try {
 92                     res.setCode(in.nextInt());
 93                 } catch(IllegalStateException e) {in.skipValue();}
 94                 return true;
 95             }
 96             else if (propertyName.equals("msg")) {
 97                 try {
 98                     res.setMsg(in.nextString());
 99                 } catch(IllegalStateException e) {in.skipValue();}
100                 return true;
101             }
102             return false;
103         }
104 
105     }
106 
107 }
返回類的父類 ResCommon.java 技術分享圖片
 1 /***
 2  * @接口:SendSMS
 3  * @URL:host + /sendsms
 4  * @編碼:www.apigj.com
 5  * @版本號:1.1
 6  ***/
 7 
 8 import java.io.IOException;
 9 import java.util.ArrayList;
10 import java.util.List;
11 
12 import com.google.gson.TypeAdapter;
13 import com.google.gson.annotations.JsonAdapter;
14 import com.google.gson.annotations.SerializedName;
15 import com.google.gson.stream.JsonReader;
16 import com.google.gson.stream.JsonWriter;
17 
18 @JsonAdapter(ResSendSms.ResSendSmsTypeAdapter.class)
19 public class ResSendSms extends ResCommon {
20     // 類型版本,用於查詢類型是否已過期
21     public static final int Version = 2;
22 
23     /***
24      * 參數描述:事件ID,記錄接收短信的用戶
25      * 是否可為空:否
26     ***/
27     @SerializedName("eventid")
28     private String eventid;
29     public String getEventid(){
30         return eventid;
31     }
32     public void setEventid(String eventid){
33         this.eventid = eventid;
34     }
35 
36     /***
37      * 檢查類型完整性
38      *
39      * @return true代表類型通過完整性檢查 
40     ***/
41     public boolean checkVarRequire() {
42         if(!super.checkVarRequire()){
43             return false;
44         }
45         if(getEventid() == null){
46             System.out.println("Lake of (eventid)");
47             return false;
48         }
49         return true;
50     }
51 
52     public static class ResSendSmsTypeAdapter<T> extends ResCommonTypeAdapter<ResSendSms> {
53         @Override
54         public void write(JsonWriter out, ResCommon value) throws IOException {
55             out.beginObject();
56             writeOBJ(out, (ResSendSms)value);
57             out.endObject();
58         }
59 
60         protected void writeOBJ(JsonWriter out, ResSendSms value) throws IOException {
61             super.writeOBJ(out, value);
62             out.name("eventid").value(value.getEventid());
63         }
64 
65         @Override
66         public ResSendSms read(JsonReader in) throws IOException {
67             ResSendSms res = new ResSendSms();
68             in.beginObject();
69             while (in.hasNext()) {
70                 String propertyName = in.nextName();
71                 if(!readOBJ(res, in, propertyName)) {
72                     in.skipValue();
73                 }
74             }
75             in.endObject();
76             return res;
77         }
78 
79         protected boolean readOBJ(ResSendSms res, JsonReader in, String propertyName) throws IOException {
80             if (super.readOBJ(res, in, propertyName)) {
81                 return true;
82             }else 
83             if (propertyName.equals("eventid")) {
84                 try {
85                     res.setEventid(in.nextString());
86                 } catch(IllegalStateException e) {in.skipValue();}
87                 return true;
88             }
89             return false;
90         }
91 
92     }
93 
94 }
返回類 ResSendSms.java

具體請求返回代碼還是要自己寫的,希望API管家繼續完善,以後也可以自動生成把URL和請求方法,請求頭包括進去,那就更完美了(懶癌又發作了)。。。

Api管家系列(一):初探