1. 程式人生 > >ballerina 學習 三十 擴充套件開發(一)

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);
}

參考資料

相關推薦

ballerina 學習 擴充套件開發

ballerina 主要是分為兩大類 基於ballerina 語言開發的,一般是客戶端的connector 使用java語言開發的(類似的基於jvm的都可以),一般是註解以及進行構件生成 ballerina 語言開發說明 是一個ballerian 的包 建立一個物件包含了init 、ge

學習Android TV/盒子開發

寫在前面的話: 本人做了幾年的機頂盒和Android電視上的應用開發,寫這些文章只是為了讓初次接觸大屏開發的同學能夠快速上手。 TV端因為沒有觸控操作,只有遙控操作,所以焦點處理、控制以及按鍵監聽是其主要特點。 焦點處理 設定可獲取焦點 佈局中需要設定某個控制元件可獲取焦點需要加

ballerina 學習 擴充套件開發

上篇說了使用ballerina 語言開發擴充套件模組,對於註解型別的我們是需要使用java 語言進行 開發的 註解擴充套件外掛的使用 這個註解是呼叫方法之後,會生成一個文字檔案 import ballerina/http; import ballerinax/hello; @hell

從零開始學習OpenCL開發架構

處理器 多媒體 c++ stl context 實驗 通用 必看 是你 同時存在 1 異構計算、GPGPU與OpenCL OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他芯片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充

學習Android TV/盒子開發

TV、機頂盒開發除錯不能像手機一樣通過USB線連線除錯,可通過ADB連線除錯 連線電視 adb connect 10.74.84.199 1 2 連線後就可以開始開發除錯了! 斷開連線 // 斷開某個裝置 adb disconnect 10.74.84

從零開始學習敏捷開發

一、敏捷開發--歷史背景:   20世紀60年代:軟體作坊,軟體規模小,以作坊式開發為主;  70年代:軟體危機,硬體飛速發展,軟體規模和複雜度激增,引發軟體危機;  80年代:軟體過程控制,引入成熟生產製造管理方法,以“過程為中心”分階段來控制軟體開發(瀑布模型),一定程度上緩解了軟體危機;  90年代:

吳恩達機器學習訓練祕籍整理十三到五章

第三十三章 為何與人類表現水平進行對比: 許多機器學習系統的設計目的是想要自動化一些人類可以處理得很好的事情,可舉的例子有影象識別、語音識別以及垃圾郵件分類等等。此外,有許多理由表明在處理人類擅長的任務時,構建機器一個學習系統會更加簡單: 1.易於從人為標籤中獲取資料 2.基於人類直

吳恩達機器學習訓練祕籍整理二八到二章學習曲線

第二十八章: 繪製學習曲線。隨著訓練集的增加,錯誤率逐漸的減少。  第二十九章: 繪製訓練誤差曲線。隨著訓練集大小的增加,開發集(和測試集)誤差應該會降低,但你的訓練集誤差往往會同時增加。  第三十章: 高偏差: 隨著我們新增更多的訓練

Java進階學習四天WebService

一、WebService介紹 1、使用場景 ① 不同的移動客戶端訪問 ② 需要訪問第三方的專案 2、ISO的七層模型:物理層、資料鏈路層、網路層、傳輸層、表示層、會話層、應用層 3、基於Socket建立Web服務 ① Socket通訊的服務端,實現大小寫轉化 publ

Java進階學習二天SpringMVC

一、回顧struts2+Spring開發 1、需求:學生註冊【add.jsp > StudentAction.java > addOK.jsp】 ① Emp.java public class Emp { private String id;//編號 privat

Spring BootSpring4擴充套件分析

1. 將Bean加入到Spring容器裡(讓Spring 進行管理),有2鍾方法     1.使用 一些指定的註解   @Component  , @Controller , @Service , @Repository 等      2.建立一個 配置類 ,在類裡 建立

零基礎開發OpenGL ES 2.0學習筆記-Android篇

看到蘋果應用商店的火爆,也想做點東西放在上面,現在終於有點時間,可是發現用到的技術都不會,要學的東西很多呀(真是落伍了)~ 身為一個JAVA程式設計師,IOS完全不懂,Android只會一些皮毛,OpenGL更是一竅不通。 所有的東西肯定都是以JAVA思想來寫,摻雜著自己的

ballerina 學習 二 編寫安全的程式

ballerina編譯器已經集成了部分安全檢測,在編譯時可以幫助我們生成錯誤提示,同時ballerina 標準庫 已經對於常見漏洞高發的地方做了很好的處理,當我們編寫了有安全隱患的程式碼,編譯器就已經提示給 我們了。 常見的問題 sql 注入 path 操作 file 操作 未授

VS2017環境下GMap的學習開發

我本人自學GMap走了不少彎路,希望這些文章能幫助到大家快速上手! GMap環境配置 下載GMap 開啟官網GMap.net,點選download archive 進行下載並解壓。 執行GMap 找到解壓後的檔案下的目錄:greatmaps\sourceCode\gre

從零學習遊戲伺服器開發款多人聯機實時對戰遊戲開始

寫在前面的話      經常有學生或者初學者問我如何去閱讀和學習一個開源軟體的程式碼,也有不少朋友在工作崗位時面對前同事留下的專案,由於文件不完善、程式碼註釋少、工程數量大,而無從下手。本文將來通過一個多人聯機實時對戰遊戲——最後一戰,來解答以上問題。      其實,我以上

【平行計算-CUDA開發】從零開始學習OpenCL開發架構

本文將作為我《從零開始做OpenCL開發》系列文章的第一篇。 1 異構計算、GPGPU與OpenCL   OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他晶片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充分利用G

學習微信公眾號開發

開發校驗程式必須能夠處理HTTP GET請求 請求校驗流程 獲取GET請求中的4個引數 signature、timestamp、nonce和echostr; 將token、timestamp、nonce3個引數按照字典排序 將排序後的3個引數按順序拼接成一個字串,並對該字

WIN32介面開發:DUI雛形開發

前言:這部分涉及工程比較大,所以我打算分開為兩篇來寫,第一篇完成基本框架的構建,第二篇新增上EVENT和NOTIFY機制。 完成目標:仿照DirectUI,完成一個基本雛形,開發一個佈局控制元件(Dialog),和一個按鈕控制元件(Button),通過XML來佈局窗體,最後

php擴充套件開發 基本介紹和擴充套件開發的基本步驟

需要開發擴充套件的場景: 1)應用非常注重效率,如複雜的影象演算法,需要編寫成擴充套件模組 2)有些系統呼叫不能用PHP直接訪問,比如Linux下的fork函式建立一個程序,需要編寫擴充套件 3)需要商業化一個應用,又不想暴露原始碼 一,搭建PHP框架 1  

Salesforce學習之路-developer篇利用VS Code結合Git開發Salesforce

Part 1: 從Git中克隆程式碼到本地 git clone https://github.com/git/git Part 2: 在VS Code中安裝Salesforce和Git外掛 在VS Code中開啟程式碼工程 安裝Salesforce Extension Pack 安裝