Как позвонить в сервис через приложение на основе меню в 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;
        }
    }
}
Другие вопросы по тегам