Post: Novos recursos do servidor RAD no RAD Studio 10.3

Alessandro Medeiros

Este artigo é uma tradução do artigo: http://blog.marcocantu.com/blog/2018-december-new-radserver-103.html

A versão do RAD Server que acompanha o RAD Studio 10.3 oferece um conjunto muito significativo de aprimoramentos, com uma nova lógica de mapeamento de URL e novos componentes do lado do servidor.

A versão do RAD Server que acompanha o RAD Studio 10.3 oferece um conjunto muito significativo de aprimoramentos, principalmente focado em como um recurso (e ter uma URL) é mapeado para classes e métodos no servidor. Embora a ideia principal de ter classes (ou módulos de dados) que implementam recursos permaneça a mesma, há duas novas abordagens:

  • Primeiro, você pode mapear a mesma URL e o HTTP Verb para vários manipuladores de método, com base no tipo de conteúdo e nos cabeçalhos HTTP de tipos aceitos. Como uma mudança lateral, você também pode mapear livremente verbos HTTP para nomes de métodos personalizados.
  • Segundo, em vez de implementar os métodos reais para os verbos HTTP na classe de recursos, eles podem ser encaminhados para uma classe de implementação separada e possivelmente compartilhada, que precisa suportar uma interface específica. Para simplificar ainda mais as coisas, o RAD Studio inclui componentes prontos para uso para gerenciamento de arquivos e conjuntos de dados

Usando vários tipos de aceitação com EndpointProduce

Um dos novos recursos que mencionei acima é a capacidade de mapear a mesma URL exata para métodos diferentes, dependendo de alguns cabeçalhos HTTP. Para uma operação GET, você pode discriminar o tipo de conteúdo indicado no cabeçalho Aceitar HTTP. Você faz isso decorando os métodos com o atributo EndpointProduce mais um tipo MIME relacionado.

Este é o exemplo de uma classe que aceita imagens ou dados gerais (para o Chrome, pelo menos a aplicação / xml está em qualquer chamada geral):


type
    [ResourceName('content')]
    TContentResource1 = class(TDataModule)
    published
       [ResourceSuffix ('*')]
       [EndpointProduce ('image/jpeg')]
       procedure GetImage(const AContext: TEndpointContext;
           const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
       [ResourceSuffix ('*')]
       [EndpointProduce ('application/xml')]
       procedure GetText(const AContext: TEndpointContext;
       const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
end;

A implementação desses métodos é bastante trivial, pois todo o código é retornar um arquivo:


procedure TContentResource1.GetImage(const AContext: TEndpointContext;
    const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
var
    fs: TFileStream;
begin
    fs := TFileStream.Create('c:\temp\content.jpeg', fmOpenRead);
    AResponse.Body.SetStream(fs, 'image/jpeg', True);
end;

Como você pode testá-lo? Certamente não apenas apontando o seu navegador para o URL? se você receber invariavelmente o resultado do segundo método, mas também poderá receber uma mensagem de erro indicando que nenhum dos pontos de extremidade disponíveis corresponde à solicitação. Para um teste simples, eu escrevi o seguinte código HTML, que se refere ao mesmo URL de duas maneiras diferentes que o navegador resolve com diferentes cabeçalhos Aceitar na solicitação:

<html>
  <head>
    <title>a page for rad server</title>
  </head>
  <body>
    
<h1>a page</h1>

    

an image below

    <img src="/content/test.jpeg"></pre>
<h1>some more</h1>

<iframe src="/content/test.txt">

</body>
</html>

Observe que você também pode servir isso do RAD Server configurando-o na seção — do arquivo INI (consulte o documento ou esta postagem do blog ).

Agora, a saída da página é semelhante à seguinte, com as duas solicitações sendo manipuladas por métodos diferentes:

Você pode ver o que acontece habilitando, por exemplo, o suporte do Dev Tools no Chrome e olhando para os cabeçalhos da segunda solicitação (a fonte test.txt no quadro):

Usando o componente EMSFileResource

A nova capacidade de delegar a implementação de recursos é melhor demonstrada usando os novos componentes introduzidos em 10.3. Usar o componente TEMSFileResource é uma maneira mais fácil de retornar arquivos em comparação com a implementação acima e, na verdade, permite ler e atualizar os arquivos com literalmente sem código.

Adicionar o componente a um módulo de dados (ou criá-lo no código) é bastante direto, já que as únicas propriedades necessárias são as ações permitidas (quais métodos HTML podem ser executados) e a pasta. Observe que, mais que uma pasta, você precisa de um modelo mapeado para a URL, portanto, qualquer parâmetro de URL adicional é interpretado como o nome do arquivo.


object EMSFileResource1: TEMSFileResource
   AllowedActions = [List, Get]
   PathTemplate = 'c:\temp\{id}'
end

Em termos de declaração de classe de módulo de dados, tudo que você precisa é mapear as operações (listar e obter, neste caso) para o componente):


type
    [ResourceName('files')]
    TFilesResource1 = class(TDataModule)
    [ResourceSuffix('list', '/')]
    [ResourceSuffix('get', '/{id}')]
    EMSFileResource1: TEMSFileResource;
    published
end;

Isso é tudo o que você precisa para poder retornar um array JSON com a lista de arquivos e acessar qualquer um desses arquivos. Esta é a lista de arquivos no formato JSON em um navegador:

Usando o componente EMSDataSetResource

Se acessar arquivos é legal e pode ser útil em alguns aplicativos, o outro novo componente para aplicações RAD Server adicionado em 10.3, EMSDataSetResource, é o que pode realmente economizar muito trabalho para muitos serviços web – dado a maioria dos os serviços acabam acessando bancos de dados. A maneira mais simples de ver esse componente em ação é colocar em um módulo de dados uma conexão de banco de dados (neste caso com uma conexão SQL Lite a um banco de dados de amostra fornecido com o RAD Studio), uma consulta simples e um componente EMSDataSetResource conectado com o inquerir.

Novamente, os componentes precisam ter configurações adequadas em AllowedActions. Além disso, os componentes têm várias opções de recursos que você deseja ativar, como paginação e classificação, e maneiras de indicar manualmente o campo-chave e como corresponder a uma única solicitação de registro. Para paginação, defino um tamanho de página menor para a demonstração, pois isso facilita a visualização em ação:


object TCustomerResource1: TTCustomerResource1
    object EmployeeConnection: TFDConnection
        Params.Strings = (
            'ConnectionDef=SQLite_Demo')
        Connected = True
        LoginPrompt = False
    end
    object CustomerTable: TFDQuery
        Connection = EmployeeConnection
        SQL.Strings = (
            'SELECT * FROM CUSTOMERS'
            'ORDER BY {IIF(!SORT, !SORT, CustomerID)}')
     end
    object CustomerResource: TEMSDataSetResource
         AllowedActions = [List, Get, Post, Put, Delete]
         DataSet = CustomerTable
         PageSize = 10
    end
end

Agora a implementação deste recurso RAD Server, que permite ler páginas de dados, ler registros individuais, atualizar e criar novos registros, não possui código real (a exclusão não funciona realmente porque existem outras tabelas com chaves estrangeiras para a tabela em questão ):


type
    [ResourceName('TCustomer')]
    TTCustomerResource1 = class(TDataModule)
    EmployeeConnection: TFDConnection;
    CustomerTable: TFDQuery;
    [ResourceSuffix('list', '/')]
    [ResourceSuffix('get', '/{CustomerID}')]
    [ResourceSuffix('put', '/{CustomerID}')]
    [ResourceSuffix('post', '/')]
    [ResourceSuffix('delete', '/{CustomerID}')]
    CustomerResource: TEMSDataSetResource;
    FDQuery1: TFDQuery;
end;

Aqui estão duas imagens de navegador com uma página de dados e um registro individual:

O componente EMSDataSetResource tem muitas mais funcionalidades do que este post e o demo (de novo, acessível no GitHub ) mostra, mas isso deve fornecê-lo com um bom ponto de partida para explorar o que há de novo para desenvolvimento RAD Server no RAD Studio 10.3.

Querendo melhorar seu desenvolvimento, otimizar o seu tempo e de ter a possibilidade de atender melhor os seus clientes?

Com o treinamento RestFul DataSnap você irá desenvolver um servidor de aplicação RestFul com Datasnap e utilizar todos os seus benefícios que irá facilitar muito a sua vida, quando seu cliente disser “preciso dos meus dados na web hoje mesmo” você estará preparado para entregar uma solução robusta e eficaz.Nesse treinamento você irá aprender de forma prática a criar as principais rotinas de CRUD e Segurança para servidores RestFul Datasnap que podem ser consumidos de qualquer aplicação front-end.

No treinamento eu desenvolvi um método que alinha exemplos reais de aplicação das técnicas para resolver problemas do dia a dia.

TREINAMENTO RESTFULL DATASNAP

Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre Novos recursos do servidor RAD no RAD Studio 10.3, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao Novos recursos do servidor RAD no RAD Studio 10.3, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
Gostou?
Compartilhe:

Embarque no foguete com milhares de devs para aprender desenvolvimento, evoluir de forma contínua e se manter relevante no mercado.

Dúvidas
Cadastre-se em nossa lista

Para ter acesso em primeira mão, a tudo que acontece na Academia do Código, basta se cadastrar em nossa lista

Grupo Thulio Bittencourt | Academia do Código

#FaçaPartedaHistória

Copyright © 2024 – Todos os direitos reservados