Api管家系列(一):初探
阿新 • • 發佈:2019-04-25
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;請求類 ReqSendSms.java14 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 }
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管家系列(一):初探