ballerina 主要是分爲兩大類java
- 基於ballerina 語言開發的,通常是客戶端的connector
- 使用java語言開發的(相似的基於jvm的均可以),通常是註解以及進行構件生成
ballerina 語言開發說明
- 是一個ballerian 的包
- 建立一個對象包含了init 、getCallerActions 函數
- 實現init 函數,次函數是在用戶實例化一個endpoint的時候
- 實現getCallerActions 函數,次函數是在connect 必須別返回的時候進行調用
- 構建模塊併發布
一個twilio connector 使用說明
官方提供了單文件以及多文件的代碼組織方式,各有優缺點,結合實際使用git
- 使用demo(注意官方文檔的版本有問題,最好參考github 學習)
import ballerina/config; import ballerina/io; import wso2/twilio; public function main(string... args) { endpoint twilio:Client twilioClient { accountSId:config:getAsString("ACCOUNT_SID"), authToken:config:getAsString("AUTH_TOKEN"), xAuthyKey:config:getAsString("AUTHY_API_KEY") }; var details = twilioClient->getAccountDetails(); match details { twilio:Account account => io:println(account); twilio:TwilioError twilioError => io:println(twilioError); } }
twilio connector 開發細節說明
按照流程開發便可github
- 是一個模塊
咱們能夠使用ballerina init 建立
- 一個對象包含了init 、getCallerActions 函數
由於其餘地方須要調用,咱們的可見性,使用public 修飾json
endpoint: public type TwilioClient object { // 配置參數 public TwilioConfiguration twilioConfig; public TwilioConnector twilioConnector = new; // init 函數 public function init(TwilioConfiguration config); documentation { Initialize Twilio endpoint R{{}} The Twilio connector object } // getCallerActions 函數 public function getCallerActions() returns TwilioConnector; }; 配置說明: public type TwilioConfiguration record { http:ClientEndpointConfig clientConfig; };
- connector 對象,實際上就是具體幹活的對象
public type TwilioConnector object { public string accountSId; public http:Client client; public function getAccountDetails() returns Account|error; };
- 常量以及record 定義
public type Account record { string sid; string name; string status; string ^"type"; string createdDate; string updatedDate; }; // Constants @final string BASE_URL = "https://api.twilio.com/2010-04-01"; @final string ACCOUNTS_API = "/Accounts/"; @final string RESPONSE_TYPE_JSON = ".json"; @final string EMPTY_STRING = "";
- 實現endpoint 的init 、getCallerActions 函數
function TwilioClient::getCallerActions() returns TwilioConnector { return self.twilioConnector; } function TwilioClient::init(TwilioConfiguration config) { config.clientConfig.url = BASE_URL; string username; string password; var usernameOrEmpty = config.clientConfig.auth.username; match usernameOrEmpty { string usernameString => username = usernameString; () => { error err = { message: "Username cannot be empty" }; throw err; } } var passwordOrEmpty = config.clientConfig.auth.password; match passwordOrEmpty { string passwordString => password = passwordString; () => { error err = { message: "Password cannot be empty" }; throw err; } } self.twilioConnector.accountSId = username; self.twilioConnector.client.init(config.clientConfig); }
- 實現connector 函數
function TwilioConnector::getAccountDetails() returns Account|error { endpoint http:Client httpClient = self.client; string requestPath = ACCOUNTS_API + self.accountSId + RESPONSE_TYPE_JSON; var response = httpClient->get(requestPath); json jsonResponse = check parseResponseToJson(response); return mapJsonToAccount(jsonResponse); }
參考資料
https://ballerina.io/learn/how-to-extend-ballerina/(文檔與項目不一致)
https://github.com/wso2-ballerina/module-twilioapi