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 endpointR{{}} 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

转载于:https://www.cnblogs.com/rongfengliang/p/9913582.html

ballerina 学习 三十 扩展开发(一)相关推荐

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

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

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

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

  3. Polyworks脚本开发学习笔记(十)-互动式开发及出错控制

    Polyworks脚本开发学习笔记(十)-互动式开发及出错控制 第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务.但是,由于任务中没有交互环节,只能机械地将 曲面点 - 包边点改为Flu ...

  4. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!

    推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...

  5. 深度学习三十年创新路

    深度学习三十年创新路 编者注:深度学习火了,从任何意义上,大家谈论它的热衷程度,都超乎想象.但是,似乎很少有人提出不同的声音,说深度学习的火热,有可能是过度的繁荣,乃至不理性的盲从.而这次,有不同的想 ...

  6. c语言编程抢30,C语言编写抢三十游戏——开发笔记(总结).doc

    C语言编写抢三十游戏--开发笔记(总结) 课程设计题目:抢三十游戏 学号:XXX 姓名:XXX 组员:XXX(组长).XXX.XXX.XXX.XXX.XXX 设计时间:2009-12-19 相关背景: ...

  7. Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符

    shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...

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

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

  9. Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

    一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...

最新文章

  1. OpenStack 虚拟机启动流程 UML 分析(内含 UML 源码)
  2. pinv--求矩阵的伪逆矩阵
  3. 用gdb调试core文件
  4. C++ new/delete、malloc/free
  5. Word 2003安全模式修复程序
  6. Vue.js2.0核心思想
  7. 浅谈JavaScript中的apply、call和bind
  8. mysql sql dateadd_在SQL语句中DATEADD和DATEDIFF函数
  9. 输出排列 递归、回溯法
  10. wordpress学习(四)---url伪静态简单了解
  11. 20145321 实验三实验报告
  12. Atitit. Dwr 抛出异常error解决方案
  13. 为什么谋生是不道德的
  14. Java中的封装,继承和多态(详解)
  15. scala读取本地hdfs_scala读取hdfs数据库
  16. Unity 3D 热更新之基于 Asset Bundle Browser 的 AssetBundle包
  17. impala的优化策略:广播,hash与straight_join
  18. 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到计算机
  19. Cadence OrCAD Capture 自底而上的设计流程
  20. 完全卸载3dmax(以及桌子全家产品)

热门文章

  1. 青软新获「2022年度山东省软件和信息技术服务业综合竞争力百强企业」等三项荣誉!
  2. 【小白学前端】化腐朽为神奇-HTML+CSS3实现电影票(day01-3)
  3. [论文阅读笔记30]关于pico抽取的研究-1(4篇文献)
  4. 再见了,IE浏览器!微软决定明年停止对IE浏览器的支持
  5. CodeBlocks下创建.h .cpp文件
  6. Word2007“由于文件许可权错误,Word无法完成保存操作”问题的解决方法
  7. XTU OJ 1324 Hash
  8. 51cto python数据分析系列课程 55g_热图_ Python数据分析系列视频课程--玩转数据可视化_数据可视化视频-51CTO学院...
  9. CSS 控制边框样式
  10. 英语如此简单(转贴)