Criando aplicações RESTful com Qt e Cutelyst

Web, C++, Qt e REST uma combinação perfeita. Veja como desenvolver um servidor e cliente RESTful, campeões de desempenho.

[ Hits: 8.100 ]

Por: Daniel Nicoletti em 22/03/2018 | Blog: http://dantti.wordpress.com


Parte 2 - Aplicação cliente REST



Primeiramente crie um projeto QWidgets com uma QMainWindow, o objetivo aqui é apenas ver como criar as solicitações REST a partir de código Qt, então assumimos que já tem familiaridade em criar interfaces gráficas com o mesmo.

Nossa interface será composta:

1. QComboBox onde listaremos os UUIDs dos usuários
1. QLineEdit para digitar e visualizar o nome do usuário
1. QSpinBox para digitar e visualizar a idade do usuário
2. QPushButton para criar ou atualizar o registro de um usuário
2. QPushButton para apagar o registro do usuário

Desenhada a interface, nossa sub-classe do QMainWindow precisa ter um ponteiro para o QNetworkAccessManager, essa é a classe responsável por cuidar da comunicação com serviços de rede como HTTP e FTP. Essa classe trabalha de forma assíncrona, ela tem o funcionamento similar ao de um navegador que irá criar até 6 conexões simultâneas a um mesmo servidor, caso você tenha feito mais requisições ao mesmo tempo ela ira colocar as mesmas em uma fila.

Crie então um ponteiro QNetworkAccessManager *m_nam; como membro de sua classe para podermos reutilizá-lo. A nossa requisição para obter a lista de usuários será bastante simples:

QNetworkRequest request(QUrl("http://localhost:3000/api/v1/usuarios"));

QNetworkReply *reply = m_nam->get(request);
connect(reply, &QNetworkReply::finished, this, [this, reply] () {
    reply->deleteLater();
    const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
    const QJsonArray array = doc.array();

    for (const QJsonValue &value : array) {
        ui->uuidCB->addItem(value.toString());
    }
});

Pronto, já preenchemos com os dados via GET do servidor nosso QComboBox, agora vamos ver o código do cadastramento que é um pouco mais complexo:

QNetworkRequest request(QUrl("http://localhost:3000/api/v1/usuarios"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

QJsonObject obj{
    {"nome", ui->nomeLE->text()},
    {"idade", ui->idadeSP->value()}
};

QNetworkReply *reply = m_nam->post(request, QJsonDocument(obj).toJson());
connect(reply, &QNetworkReply::finished, this, [this, reply] () {
    reply->deleteLater();
    const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
    const QJsonObject obj = doc.object();

    if (obj.value("status").toString() == "ok") {
        ui->uuidCB->addItem(obj.value("uuid").toString());
    } else {
        qWarning() << "ERROR" << obj.value("error").toString();
    }
});

Com o código acima enviamos uma requisição HTTP usando o método POST, esse por sua vez assim como PUT aceita enviar dados para o servidor. É fundamental informar ao servidor com que tipo de dados ele estará lidando, para isso o cabeçalho "Content-Type" esta definido para "application/json", o Qt emite um aviso no terminal caso o tipo de conteúdo não tenha sido definido. Assim que o servidor responde nós adicionamos o novo UUID no combobox para que ele fique atualizado sem precisar obter todos os UUID novamente.

Como demonstrado QNetworkAccessManager já tem métodos prontos para as ações REST mais comuns, porém caso queria enviar um pedido do tipo OPTIONS por exemplo terá que criar um pedido do tipo CustomOperation:

m_nam->sendCustomRequest("OPTIONS", request);

Gostou do artigo? Ajude dando uma estrelinha para o Cutelyst em: https://github.com/cutelyst/cutelyst

Página anterior    

Páginas do artigo
   1. Introdução
   2. Parte 1 - Servidor RESTful com C++, Cutelyst e Qt
   3. Parte 2 - Aplicação cliente REST
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

DotGNU: a resposta Open Source ao dotNET

Aplicativos web em C++ usando o Tufão

Biblioteca VBMcgi: Crie aplicações Web CGI em C++ com acesso ao banco Interbase/Firebird sem mistério

Dicas para aprender programação

Bibliotecas estáticas c/c++

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts