• 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

  • 相关阅读:
    bios设置启动方式问题
    springmvc 之 easyUI开发商城管理系统
    maven 整合 ssm 异常分析
    maven 之nexus仓库管理_私服配置
    maven 之 web.xml 头设置错误问题
    maven之jre默认配置
    springMvc异常之 For input string: "show"
    mysql参照完整性 策略设置之 on update 和 on delete
    ssm之mapper异常 Result Maps collection already contains value for com.ssj.mapper.UserMapper 和 Type interface com.ssj.mapper.UserMapper is already known to the MapperRegistry.
    HDU-2054 A==B?
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9913582.html
Copyright © 2020-2023  润新知