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