如何訪問api
A. 使用 JWT 來實現對 API 的授權訪問
JWT(JSON Web Token)是一個開放標准(RFC 7519),它定義了一種緊湊且獨立的方式,可以在各個系統之間用JSON作為對象安全地傳輸信息,並且可以保證所傳輸的信息不會被篡改。
JWT通常有兩種應用場景:
本文討論第一點,如何利用JWT來實現對API的授權訪問。這樣就只有經過授權的用戶才可以調用API。
img
JWT由三部分組成,用.分割開。
Header
第一部分為Header,通常由兩部分組成:令牌的類型,即JWT,以及所使用的加密演算法。
Base64加密後,就變成了:
Payload
第二部分為Payload,裡面可以放置自定義的信息,以及過期時間、發行人等。
Base64加密後,就變成了:
Signature
第三部分為Signature,計算此簽名需要四部分信息:
接受到JWT後,利用相同的信息再計算一次簽名,然年與JWT中的簽名對比,如果不相同則說明JWT中的內容被篡改。
解碼後的JWT
img
將上面三部分都編碼後再合在一起就得到了JWT。
需要注意的是, JWT的內容並不是加密的,只是簡單的Base64編碼。 也就是說,JWT一旦泄露,裡面的信息可以被輕松獲取,因此不應該用JWT保存任何敏感信息。
img
引入依賴
這里使用了一個叫JJWT(Java JWT)的庫。
JWT Service
生成JWT
解碼JWT
驗證JWT
注冊/登錄
驗證JWT
API
這時候API就處於JWT的保護下了。API可以完全不用感知到JWT的存在,同時也可以主動獲取JWT並解碼,以得到JWT里的信息。如上所示。
搜索微信號(ID:芋道源碼),可以獲得各種 Java 源碼解析。
並且,回復【書籍】後,可以領取筆者推薦的各種 Java 從入門到架構的書籍。
B. vue怎麼實現訪問第三方 api
在 Vue.js 中使用第三方庫的方式有:
1.全局變數
在項目中添加第三方庫的最簡單方式是講其作為一個全局變數, 掛載到 window 對象上:
entry.js
window._ = require('lodash');
MyComponent.vue
export default {
created() {
console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..');
}
}
這種方式不適合於服務端渲染, 因為服務端沒有 window 對象, 是 undefined, 當試圖去訪問屬性時會報錯.
2.在每個文件中引入
另一個簡單的方式是在每一個需要該庫的文件中導入:
MyComponent.vue
import _ from 'lodash';
export default {
created() {
console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..');
}
}
這種方式是允許的, 但是比較繁瑣, 並且帶來的問題是: 你必須記住在哪些文件引用了該庫, 如果項目不再依賴這個庫時, 得去找到每一個引用該庫的文件並刪除該庫的引用. 如果構建工具沒設置正確, 可能導致該庫的多份拷貝被引用.
3.優雅的方式
在 Vuejs 項目中使用 JavaScript 庫的一個優雅方式是講其代理到 Vue 的原型對象上去. 按照這種方式, 我們引入 Moment 庫:
entry.js
import moment from 'moment';
Object.defineProperty(Vue.prototype, '$moment', { value: moment });
由於所有的組件都會從 Vue 的原型對象上繼承它們的方法, 因此在所有組件/實例中都可以通過 this.$moment: 的方式訪問 Moment 而不需要定義全局變數或者手動的引入.
MyNewComponent.vue
export default {
created() {
console.log('The time is ' . this.$moment().format("HH:mm"));
}
}
C. php怎麼調用API
使用post或者get 方法,可以用curl實現
D. 快速獲取API狀態的三種方式
在研發過程中,由於迭代更新的速度很快,API隨著產品迭代不斷調整,記錄與通知API成為了一件麻煩事。而工具能很好的解決這一難題。
1、單個API通知
在我們使用Eolinker管理API的時候,希望通知到團隊開發或者測試人員,可以在需要通知的API中設置 單個API的變更通知。
2、項目通知
還可以在項目設置 - API / 文檔變更通知 – 添加通知事件 進行批量的項目API變更通知
單個API與項目API通知支持站內信與郵件通知。
3、調用webhook
除了這種方式,Eolinker中支持webhook調用的方式進行通知,這是webhook文檔教程地址: https://help.Eolinker.com/webhook/html/usage.html
還可以用於釘釘、企業微信、飛書的通知
那麼需要怎麼實現呢?
需要先准備一個腳本,以php為例子。如:
<?php
//獲取Eolinker發送的信息,轉成數組格式
text = "Eolinker API 狀態通知:".PHP_EOL."API變更狀態:". eo_hook['content']['API_list'][0]['API_name'].PHP_EOL."工作空間名稱:". eo_hook['hook_request_time'].PHP_EOL."修改人:". eo_hook['content']['API_list'][0]['API_uri'];
text,
]
];
//判斷如果產品為API研發管理 且 事件為API文檔 且 操作為切換API狀態 則調用你想調用的介面、函數
if( eo_hook['hook_event'] == 'API_document' && curl = curl_init();
curl_setopt_array( data),
CURLOPT_HTTPHEADER => array(
"Content-Type:application/json"
),
));
}
編輯腳本並放在自己的伺服器上,然後記錄下存放的地址,確定ip+腳本文件名可以訪問到。
接下倆我們進入Eolinker空間中,會看到左側導航欄會有設置按鈕的小圖標,點擊 工作空間設置
進入空間設置後,選擇 webhook ,點擊新建服務調用
然後把剛剛創建的腳本地址以,ip地址/jiaoben.php的形式填入,然後更改API狀態就可以了。
點擊確定後,如彈出地址錯誤,則需要檢查以下原因:
(1)填寫的通知地址是否成功創建了此腳本文件
(2)訪問地址、文件名填寫是否有誤
(3)伺服器文件許可權、鏈接重定位問題
(1)Eolinker_webhook教程文檔:
https://help.Eolinker.com/webhook/html/usage.html
(2)飛書自定義機器人:
https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#top_anchor
(3)釘釘自定義機器人:
https://ding-doc.dingtalk.com/doc#/serverAPI2/qf2nxq/26eaddd5
(4)企業微信自定義機器人:
https://work.weixin.qq.com/help?person_id=1&doc_id=13376# 如何使用群機器人/如何使用群機器人
更多功能探索可以直接在工具上嘗試~
使用地址: www.eolinker.com
E. Android應用開發中如何訪問隱藏API
對於這個問題,一般可以用Java Reflect技術來解決。(一)訪問隱藏public類 例如PolicyManager就是個隱藏類,如果非要在App層訪問它,那麼就可以使用reflect技術: try { Class policyClass = Class.forName("com.android.internal.policy.PolicyManager"); } catch (Exception e) { e.printStackTrace();
}(二)訪問隱藏類的static方法 因為沒有隱藏類的對象實例,所以只能用null去訪問它的static方法或成員: try { Method makenewwindow = policyClass.getMethod("makeNewWindow", new Class[] {Context.class});
Window win = (Window)makenewwindows.invoke(null, context); } catch (Exception e) {
e.printStackTrace();
}(三)訪問public類的私有成員變數 try { Field f = WebSettings.class.getDeclaredField("mBuiltInZoomControls");
f.setAccessible(true); //關閉訪問檢查 f.setBoolean(wSettings, false); //wSettings是WebSettings對象
} catch(Exception e) {
Log.i(LOGTAG, e.toString());
} (四)訪問public類的私有成員變數 try { Method m = WebSettings.class.getDeclaredMethod("getCurrentUserAgent");
m.setAccessible(true); //關閉訪問檢查 m.invoke(wSettings); //wSettings是WebSettings對象
} catch(Exception e) {
Log.i(LOGTAG, e.toString());
} (五)訪問public類的@hide的public成員 try { Object[] args = {Integer.valueOf(5)}; Method m = WebSettings.class.getMethod("setPageCacheCapacity", new Class[]{int.class});
m.invoke(wSettings, args); //wSettings是WebSettings對象
} catch(Exception e) {
Log.i(LOGTAG, e.toString());} try {Method m = WebView.class.getMethod("getWebChromeClient");
Object ob = m.invoke(mSubView); WebChromeClient client = (WebChromeClient) ob;
} 利用反射技術的優點是靈活,能解決一些訪問限制的問題,能夠在不兼容的系統捕獲異常,而使程序不至於崩潰;缺點是步驟比較多,需要熟悉要調用的類、方法名稱訪問屬性,大量使用反射會大大增加代碼,對代碼的健壯性不利。一般被hide的類或成員可能還不太成熟穩定,所以不便公開。 另外一種解決以上訪問問題的方法是導入全編譯的classes.jar包,這種方法比較簡單。