ballerina 主要是分为两大类

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

ballerina 语言开发说明

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

一个twilio connector 使用说明

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

  • 使用demo(注意官方文档的版本有问题,最好参考github 学习)
  1. import ballerina/config;
  2. import ballerina/io;
  3. import wso2/twilio;
  4. public function main(string... args) {
  5. endpoint twilio:Client twilioClient {
  6. accountSId:config:getAsString("ACCOUNT_SID"),
  7. authToken:config:getAsString("AUTH_TOKEN"),
  8. xAuthyKey:config:getAsString("AUTHY_API_KEY")
  9. };
  10. var details = twilioClient->getAccountDetails();
  11. match details {
  12. twilio:Account account => io:println(account);
  13. twilio:TwilioError twilioError => io:println(twilioError);
  14. }
  15. }

twilio connector 开发细节说明

按照流程开发即可

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

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

  1. endpoint
  2. public type TwilioClient object {
  3. // 配置参数
  4. public TwilioConfiguration twilioConfig;
  5. public TwilioConnector twilioConnector = new;
  6. // init 函数
  7. public function init(TwilioConfiguration config);
  8. documentation { Initialize Twilio endpoint
  9. R{{}} The Twilio connector object
  10. }
  11. // getCallerActions 函数
  12. public function getCallerActions() returns TwilioConnector;
  13. };
  14. 配置说明:
  15. public type TwilioConfiguration record {
  16. http:ClientEndpointConfig clientConfig;
  17. };
  • connector 对象,实际上就是具体干活的对象
  1. public type TwilioConnector object {
  2. public string accountSId;
  3. public http:Client client;
  4. public function getAccountDetails() returns Account|error;
  5. };
  • 常量以及record 定义
  1. public type Account record {
  2. string sid;
  3. string name;
  4. string status;
  5. string ^"type";
  6. string createdDate;
  7. string updatedDate;
  8. };
  9. // Constants
  10. @final string BASE_URL = "https://api.twilio.com/2010-04-01";
  11. @final string ACCOUNTS_API = "/Accounts/";
  12. @final string RESPONSE_TYPE_JSON = ".json";
  13. @final string EMPTY_STRING = "";
  • 实现endpoint 的init 、getCallerActions 函数
  1. function TwilioClient::getCallerActions() returns TwilioConnector {
  2. return self.twilioConnector;
  3. }
  4. function TwilioClient::init(TwilioConfiguration config) {
  5. config.clientConfig.url = BASE_URL;
  6. string username;
  7. string password;
  8. var usernameOrEmpty = config.clientConfig.auth.username;
  9. match usernameOrEmpty {
  10. string usernameString => username = usernameString;
  11. () => {
  12. error err = { message: "Username cannot be empty" };
  13. throw err;
  14. }
  15. }
  16. var passwordOrEmpty = config.clientConfig.auth.password;
  17. match passwordOrEmpty {
  18. string passwordString => password = passwordString;
  19. () => {
  20. error err = { message: "Password cannot be empty" };
  21. throw err;
  22. }
  23. }
  24. self.twilioConnector.accountSId = username;
  25. self.twilioConnector.client.init(config.clientConfig);
  26. }
  • 实现connector 函数
  1. function TwilioConnector::getAccountDetails() returns Account|error {
  2. endpoint http:Client httpClient = self.client;
  3. string requestPath = ACCOUNTS_API + self.accountSId + RESPONSE_TYPE_JSON;
  4. var response = httpClient->get(requestPath);
  5. json jsonResponse = check parseResponseToJson(response);
  6. return mapJsonToAccount(jsonResponse);
  7. }

参考资料

https://ballerina.io/learn/how-to-extend-ballerina/(文档与项目不一致)
https://github.com/wso2-ballerina/module-twilio

 
 
 
 

ballerina 学习 三十 扩展开发(一)的更多相关文章

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

    上篇说了使用ballerina 语言开发扩展模块,对于注解类型的我们是需要使用java 语言进行 开发的 官方提供了一个hello 的demo可以参考 https://github.com/balle ...

  2. ballerina 学习 三十二 编写安全的程序

      ballerina编译器已经集成了部分安全检测,在编译时可以帮助我们生成错误提示,同时ballerina 标准库 已经对于常见漏洞高发的地方做了很好的处理,当我们编写了有安全隐患的代码,编译器就已 ...

  3. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  4. Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...

  5. ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例

    1. Logstash输入插件 1.1 input介绍 logstash支持很多数据源,比如说file,http,jdbc,s3等等 图片上面只是一少部分.详情见网址:https://www.elas ...

  6. Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

    一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...

  7. ballerina 学习二十八 快速grpc 服务开发

    ballerina 的grpc 开发模型,对于开发者来说简单了好多,不是schema first 的方式,而是我们 只要编写简单的ballerina service 就可以了,proto 文件是自动帮 ...

  8. Java开发学习(三十)----Maven聚合和继承解析

    一.聚合 分模块开发后,需要将这四个项目都安装到本地仓库,目前我们只能通过项目Maven面板的install来安装,并且需要安装四个,如果我们的项目足够多,那么一个个安装起来还是比较麻烦的 如果四个项 ...

  9. Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式

    一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...

随机推荐

  1. 20170523xlVBA多条件分类求和一例

    Public Sub NextSeven_CodeFrame() Application.ScreenUpdating = False Application.DisplayAlerts = Fals ...

  2. Confluence 6 选项 1 – 在 Confluence 中手动重建用户和用户组

    当你只有少量的用户和用户组的时候,使用这个方法. 使用 Confluence 的系统管理员登录 Confluence. 进入用户目录管理界面,然后移动 内部目录(internal directory) ...

  3. PHP函数总结 (一)

    <?php /** * 原理: * 函数不调用不执行,定义函数时,会将 * 函数放到内存中代码段,当调用函数时去内存 * 中函数名称所在位置中执行函数体,执行完后 * 将控制权移交回给调用函数的 ...

  4. in_array的效率

    in_array函数是个糟糕的选择.应该尽量用isset函数或array_key_exists函数来替代 .in_array函数的复杂度是O(n),而isset函数的复杂度是O(1) isset函数是 ...

  5. Android studio jni

    首先我们要明确几个概念,jni,ndk,共享库(.so). jni是java native interface的缩写,java 本地接口.它提供了若干的API实现了Java和其他语言的通信(主要是C/ ...

  6. java使用HttpClient

    HttpClient常用的包有两个 org.apache.http.client以及org.apache.commons.httpclient 我常用的是org.apache.http.client. ...

  7. oracle11g在没DNS情况下failover的配置方法

    1.Oracle 11g引入scan ip ,可在没有DNS的情况下,客户端连接RAC配置failover时,很多情况还是使用oracle10g方式.即在客户端tnsname.ora中配置failov ...

  8. Django rest framework(2)----权限

    一 添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 #!/usr/bin/env python # coding:u ...

  9. Nexcel的行列,和单元格坐标

    book.Sheets[1].UsedRange.Rows.Count 行数从1开始 book.Sheets[1].UsedRange.LastCol 从0开始 book.Sheets[1].Cell ...

  10. The "Double-Checked Locking is Broken" Declaration

    双重检查锁定在延迟初始化的单例模式中见得比较多(单例模式实现方式很多,这里为说明双重检查锁定问题,只选取这一种方式),先来看一个版本: public class Singleton { private ...