ballerina 學習 三十 擴展開發(一)

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

相關文章
相關標籤/搜索