Как позвонить в сервис через приложение на основе меню в 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);
}
}
Как я могу вызвать службу gmail, когда пользователь вводит "1"?
1 ответ
В Ballerina мы взаимодействуем с сетевыми точками, такими как сервисы, через конечные точки. Например, в качестве источника службы Gmail вы использовали две конечные точки: конечную точку прослушивателя и конечную точку клиента. Конечная точка слушателя используется для привязки вашего hello
Служба к порту, а конечная точка клиента используется для вызова стороннего API (Gmail API).
Точно так же, чтобы вызвать ваш hello
сервис от вашего main()
функция, вам нужно создать конечную точку клиента 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;
}
}
}