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.774 ]

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

DotGNU: a resposta Open Source ao dotNET

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

Aplicativos web em C++ usando o Tufão

Dynamic libraries com libtool

Estudo de ponteiros para GNU/Linux

  
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