ballerina 学习 三十 扩展开发(一)

ballerina 主要是分为两大类

  • 基于ballerina 语言开发的,一般是客户端的connector
  • 使用java语言开发的(类似的基于jvm的都可以),一般是注解以及进行构件生成

ballerina 语言开发说明

  • 是一个ballerian 的包
  • 创建一个对象包含了init 、getCallerActions 函数
  • 实现init 函数,次函数是在用户实例化一个endpoint的时候
  • 实现getCallerActions 函数,次函数是在connect 必须别返回的时候进行调用
  • 构建模块并发布

一个twilio connector 使用说明

官方提供了单文件以及多文件的代码组织方式,各有优缺点,结合实际使用

  • 使用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 开发细节说明

按照流程开发即可

  • 是一个模块
我们可以使用ballerina init 创建
  • 一个对象包含了init 、getCallerActions 函数

    因为其他地方需要调用,我们的可见性,使用public 修饰

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-twilio

posted on   荣锋亮  阅读(573)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2017-11-06 Webpack-dashboard 简单使用
2014-11-06 rpc介绍

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示