如何在 Ballerina 中通过菜单驱动的应用程序调用服务
How to call a service through a menu-driven application in Ballerina
我有一个文件 main.bal
,其中包含打印菜单和处理用户输入的内容。 gmail_service.bal
文件包含能够发送电子邮件的 hello
服务。
main.bal
function main(string... args) {
int c = 0;
while ( c != 2) {
// print options menu to choose from
io:println("-------------------------------------------------------------------------");
io:println("1. Email");
io:println("2. Exit");
io:println("-------------------------------------------------------------------------");
// read user's choice
string choice = io:readln("Enter choice 1 - 2: ");
c = check <int>choice;
if (c == 1) {
//code to send email
}
if (c == 2) {
break;
}
}
}
gmail_service.bal
// A system package containing protocol access constructs
// Package objects referenced with 'http:' in code
import ballerina/http;
import ballerina/io;
import wso2/gmail;
import ballerina/config;
endpoint gmail:Client gmailEP {
clientConfig:{
auth:{
accessToken:config:getAsString("accessToken"),
clientId:config:getAsString("clientId"),
clientSecret:config:getAsString("clientSecret"),
refreshToken:config:getAsString("refreshToken")
}
}
};
documentation {
A service endpoint represents a listener.
}
endpoint http:Listener listener {
port:9090
};
documentation {
A service is a network-accessible API
Advertised on '/hello', port comes from listener endpoint
}
@http:ServiceConfig {
basePath: "/"
}
service<http:Service> hello bind listener {
@http:ResourceConfig {
methods: ["POST"],
path: "/"
}
documentation {
A resource is an invokable API method
Accessible at '/hello/sayHello
'caller' is the client invoking this resource
P{{caller}} Server Connector
P{{request}} Request
}
sayHello (endpoint caller, http:Request request) {
gmail:MessageRequest messageRequest;
messageRequest.recipient = "abc@gmail.com";
messageRequest.sender = "efg@gmail.com";
messageRequest.cc = "";
messageRequest.subject = "Email-Subject";
messageRequest.messageBody = "Email Message Body Text";
//Set the content type of the mail as TEXT_PLAIN or TEXT_HTML.
messageRequest.contentType = gmail:TEXT_PLAIN;
//Send the message.
var sendMessageResponse = gmailEP -> sendMessage("efg@gmail.com", messageRequest);
}
}
如何在用户输入“1”时调用gmail服务?
在 Ballerina 中,我们通过端点与网络可访问点(例如服务)进行交互。例如,在您的 Gmail 服务源中,您使用了两个端点:侦听器端点和客户端端点。侦听器端点用于将您的 hello
服务绑定到端口,客户端端点用于调用第三方 API(Gmail API)。
同样,要从 main()
函数调用 hello
服务,您需要为该服务创建一个 HTTP 客户端端点。您将通过此端点与您的服务进行交互。 main.bal
的修改后的源代码如下所示。请注意,负载尚未设置为 POST 请求,因为请求正文未在 hello
服务中的任何地方使用。
import ballerina/http;
import ballerina/io;
endpoint http:Client emailClient {
url: "http://localhost:9090"
};
function main(string... args) {
int c = 0;
while ( c != 2) {
// print options menu to choose from
io:println("-------------------------------------------------------------------------");
io:println("1. Email");
io:println("2. Exit");
io:println("-------------------------------------------------------------------------");
// read user's choice
string choice = io:readln("Enter choice 1 - 2: ");
c = check <int>choice;
if (c == 1) {
http:Response response = check emailClient->post("/", ());
// Do whatever you want with the response
}
if (c == 2) {
break;
}
}
}
我有一个文件 main.bal
,其中包含打印菜单和处理用户输入的内容。 gmail_service.bal
文件包含能够发送电子邮件的 hello
服务。
main.bal
function main(string... args) {
int c = 0;
while ( c != 2) {
// print options menu to choose from
io:println("-------------------------------------------------------------------------");
io:println("1. Email");
io:println("2. Exit");
io:println("-------------------------------------------------------------------------");
// read user's choice
string choice = io:readln("Enter choice 1 - 2: ");
c = check <int>choice;
if (c == 1) {
//code to send email
}
if (c == 2) {
break;
}
}
}
gmail_service.bal
// A system package containing protocol access constructs
// Package objects referenced with 'http:' in code
import ballerina/http;
import ballerina/io;
import wso2/gmail;
import ballerina/config;
endpoint gmail:Client gmailEP {
clientConfig:{
auth:{
accessToken:config:getAsString("accessToken"),
clientId:config:getAsString("clientId"),
clientSecret:config:getAsString("clientSecret"),
refreshToken:config:getAsString("refreshToken")
}
}
};
documentation {
A service endpoint represents a listener.
}
endpoint http:Listener listener {
port:9090
};
documentation {
A service is a network-accessible API
Advertised on '/hello', port comes from listener endpoint
}
@http:ServiceConfig {
basePath: "/"
}
service<http:Service> hello bind listener {
@http:ResourceConfig {
methods: ["POST"],
path: "/"
}
documentation {
A resource is an invokable API method
Accessible at '/hello/sayHello
'caller' is the client invoking this resource
P{{caller}} Server Connector
P{{request}} Request
}
sayHello (endpoint caller, http:Request request) {
gmail:MessageRequest messageRequest;
messageRequest.recipient = "abc@gmail.com";
messageRequest.sender = "efg@gmail.com";
messageRequest.cc = "";
messageRequest.subject = "Email-Subject";
messageRequest.messageBody = "Email Message Body Text";
//Set the content type of the mail as TEXT_PLAIN or TEXT_HTML.
messageRequest.contentType = gmail:TEXT_PLAIN;
//Send the message.
var sendMessageResponse = gmailEP -> sendMessage("efg@gmail.com", messageRequest);
}
}
如何在用户输入“1”时调用gmail服务?
在 Ballerina 中,我们通过端点与网络可访问点(例如服务)进行交互。例如,在您的 Gmail 服务源中,您使用了两个端点:侦听器端点和客户端端点。侦听器端点用于将您的 hello
服务绑定到端口,客户端端点用于调用第三方 API(Gmail API)。
同样,要从 main()
函数调用 hello
服务,您需要为该服务创建一个 HTTP 客户端端点。您将通过此端点与您的服务进行交互。 main.bal
的修改后的源代码如下所示。请注意,负载尚未设置为 POST 请求,因为请求正文未在 hello
服务中的任何地方使用。
import ballerina/http;
import ballerina/io;
endpoint http:Client emailClient {
url: "http://localhost:9090"
};
function main(string... args) {
int c = 0;
while ( c != 2) {
// print options menu to choose from
io:println("-------------------------------------------------------------------------");
io:println("1. Email");
io:println("2. Exit");
io:println("-------------------------------------------------------------------------");
// read user's choice
string choice = io:readln("Enter choice 1 - 2: ");
c = check <int>choice;
if (c == 1) {
http:Response response = check emailClient->post("/", ());
// Do whatever you want with the response
}
if (c == 2) {
break;
}
}
}