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: 7.773 ]

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


Parte 1 - Servidor RESTful com C++, Cutelyst e Qt



Primeiramente, criamos a aplicação do servidor:

cutelyst --create-app ServidorREST

E então iremos criar o Controller que terá os métodos da API:

cutelyst --controller ApiV1

Feito isso, a nova classe deve ser instanciada em serverrest.cpp, no método init() com:

#include "apiv1.h"

bool ServerREST::init() {

    new ApiV1(this);

    ...

Adicione os seguintes métodos ao arquivo "apiv1.h"

C_ATTR(usuarios, :Local :AutoArgs :ActionClass(REST))
void usuarios(Context *c);

C_ATTR(usuarios_GET, :Private)
void usuarios_GET(Context *c);

C_ATTR(usuarios_POST, :Private)
void usuarios_POST(Context *c);

C_ATTR(usuarios_uuid, :Path('usuarios') :AutoArgs :ActionClass(REST))
void usuarios_uuid(Context *c, const QString &uuid);

C_ATTR(usuarios_uuid_GET, :Private)
void usuarios_uuid_GET(Context *c, const QString &uuid);

C_ATTR(usuarios_uuid_PUT, :Private)
void usuarios_uuid_PUT(Context *c, const QString &uuid);

C_ATTR(usuarios_uuid_DELETE, :Private)
void usuarios_uuid_DELETE(Context *c, const QString &uuid);

A macro C_ATTR é usada para adicionar metadados sobre a classe que o MOC ira guardar, dessa forma o Cutelyst sabe como mapear as URLs a essas funções.
  • :Local - mapeia o nome do método a URL gerando /api/v1/usuarios;
  • :AutoArgs - verifica automaticamente o número de argumentos após o Context*, em usuários_uuid temos um logo o método será chamado caso a URL seja /api/v1/usuarios/qualquer-coisa;
  • :ActionClass(REST) - irá carregar o plugin REST que criará uma classe Action para tomar conta desse método, ActionREST ira chamar os outros métodos dependendo do método chamado;
  • :Private - registra a ação como privada no Cutelyst, de forma que ela não é diretamente acessível via URL.

Pronto, isso já é suficiente para termos um mapeamento automático dependendo do método HTTP para cada função, é importante notar que a primeira função (sem _MÉTODO) é sempre executada, para mais informações, veja a API do ActionREST.

Por brevidade, vou mostrar apenas o código do GET de usuários, o restante pode ser visto no GitHub:

void ApiV1::usuarios_GET(Context *c)
{
    QSettings s;
    const QStringList uuids = s.childGroups();

    QJsonArray array;
    for (const QString &uuid : uuids) {
        array.append(uuid);
    }

    c->response()->setJsonBody(array);
}

Após todos os métodos implementados inicie o servidor:

# cutelyst -r --server

Para testar a API pode testar um POST com o curl:

# curl -H "Content-Type: application/json" -X POST -d '{"nome":"fulano","idade":32}' http://localhost:3000/api/v1/usuarios

Pronto, você já tem uma aplicação servidor REST, feita em Qt, com uma das mais respostas mais rápidas do velho oeste! :)

Não, é sério, confira os benchmarks em: https://www.techempower.com/benchmarks/

Agora vamos para parte 2, que é criar a aplicação cliente que irá consumir essa API.

Página anterior     Próxima página

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

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

DotGNU: a resposta Open Source ao dotNET

Aplicativos web em C++ usando o Tufão

A poderosa nuvem: Intel® DevCloud com GPU Iris Xe Max!

Otimização de algoritmos

  
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