En aquest tema, aprendrem com integrar serveis web en les nostres aplicacions Delphi. Els serveis web permeten que les aplicacions es comuniquin entre si a través d'Internet, utilitzant protocols estàndard com HTTP i formats de dades com JSON o XML. Aquesta capacitat és essencial per a la creació d'aplicacions modernes que necessiten interactuar amb altres sistemes o serveis en línia.
Conceptes Clau
- Serveis Web: Són aplicacions accessibles a través d'Internet que proporcionen funcionalitats específiques a altres aplicacions.
- Protocols: Els serveis web utilitzen protocols com HTTP/HTTPS per a la comunicació.
- Formats de Dades: Els formats més comuns per a l'intercanvi de dades són JSON i XML.
- RESTful Services: Un estil arquitectònic per a la creació de serveis web que utilitzen operacions HTTP estàndard.
Passos per Integrar Serveis Web
- Configuració del Projecte
Abans de començar, assegura't que tens un projecte Delphi configurat i que pots accedir a Internet des de la teva aplicació.
- Utilització de Biblioteques HTTP
Delphi proporciona diverses biblioteques per treballar amb HTTP, com TIdHTTP
de la biblioteca Indy i THTTPClient
de la unitat System.Net.HttpClient
.
Exemple amb THTTPClient
uses System.SysUtils, System.Classes, System.Net.HttpClient, System.JSON; procedure TForm1.Button1Click(Sender: TObject); var HttpClient: THTTPClient; Response: IHTTPResponse; JsonResponse: TJSONObject; begin HttpClient := THTTPClient.Create; try Response := HttpClient.Get('https://api.example.com/data'); if Response.StatusCode = 200 then begin JsonResponse := TJSONObject.ParseJSONValue(Response.ContentAsString) as TJSONObject; try // Processar la resposta JSON ShowMessage(JsonResponse.GetValue('key').Value); finally JsonResponse.Free; end; end else ShowMessage('Error: ' + Response.StatusText); finally HttpClient.Free; end; end;
- Tractament de Dades JSON
La majoria dels serveis web moderns utilitzen JSON per a l'intercanvi de dades. Delphi proporciona la unitat System.JSON
per treballar amb JSON.
Exemple de Processament de JSON
uses System.JSON; procedure ProcessJsonResponse(const JsonString: string); var JsonObject: TJSONObject; JsonValue: TJSONValue; begin JsonObject := TJSONObject.ParseJSONValue(JsonString) as TJSONObject; try JsonValue := JsonObject.GetValue('key'); if Assigned(JsonValue) then ShowMessage(JsonValue.Value); finally JsonObject.Free; end; end;
- Tractament de Dades XML
Encara que menys comú que JSON, alguns serveis web utilitzen XML. Delphi proporciona la unitat Xml.XMLDoc
per treballar amb XML.
Exemple de Processament d'XML
uses Xml.XMLDoc, Xml.XMLIntf; procedure ProcessXmlResponse(const XmlString: string); var XmlDocument: IXMLDocument; RootNode: IXMLNode; begin XmlDocument := LoadXMLData(XmlString); RootNode := XmlDocument.DocumentElement; ShowMessage(RootNode.ChildNodes['key'].Text); end;
- Gestió d'Errors
És important gestionar els errors que poden ocórrer durant la comunicació amb els serveis web, com ara problemes de connexió o respostes invàlides.
Exemple de Gestió d'Errors
uses System.SysUtils, System.Net.HttpClient; procedure TForm1.Button1Click(Sender: TObject); var HttpClient: THTTPClient; Response: IHTTPResponse; begin HttpClient := THTTPClient.Create; try try Response := HttpClient.Get('https://api.example.com/data'); if Response.StatusCode = 200 then ShowMessage('Success: ' + Response.ContentAsString) else ShowMessage('Error: ' + Response.StatusText); except on E: ENetHTTPClientException do ShowMessage('HTTP Error: ' + E.Message); on E: Exception do ShowMessage('General Error: ' + E.Message); end; finally HttpClient.Free; end; end;
Exercicis Pràctics
Exercici 1: Consumir un Servei Web RESTful
- Crea una aplicació Delphi que consumeixi un servei web RESTful públic (per exemple, un servei que proporcioni informació meteorològica).
- Mostra la informació obtinguda en un formulari Delphi.
Solució
procedure TForm1.Button1Click(Sender: TObject); var HttpClient: THTTPClient; Response: IHTTPResponse; JsonResponse: TJSONObject; begin HttpClient := THTTPClient.Create; try Response := HttpClient.Get('https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London'); if Response.StatusCode = 200 then begin JsonResponse := TJSONObject.ParseJSONValue(Response.ContentAsString) as TJSONObject; try ShowMessage('Temperature: ' + JsonResponse.GetValue('current').GetValue('temp_c').Value + '°C'); finally JsonResponse.Free; end; end else ShowMessage('Error: ' + Response.StatusText); finally HttpClient.Free; end; end;
Exercici 2: Enviar Dades a un Servei Web
- Crea una aplicació Delphi que enviï dades a un servei web RESTful (per exemple, un servei que accepti dades de registre d'usuari).
- Mostra la resposta del servei web en un formulari Delphi.
Solució
procedure TForm1.Button1Click(Sender: TObject); var HttpClient: THTTPClient; Response: IHTTPResponse; JsonToSend: TJSONObject; begin HttpClient := THTTPClient.Create; JsonToSend := TJSONObject.Create; try JsonToSend.AddPair('username', 'testuser'); JsonToSend.AddPair('password', 'testpassword'); Response := HttpClient.Post('https://api.example.com/register', TStringStream.Create(JsonToSend.ToString), nil, [TNameValuePair.Create('Content-Type', 'application/json')]); if Response.StatusCode = 200 then ShowMessage('Success: ' + Response.ContentAsString) else ShowMessage('Error: ' + Response.StatusText); finally JsonToSend.Free; HttpClient.Free; end; end;
Conclusió
Integrar serveis web en les aplicacions Delphi és una habilitat essencial per a qualsevol desenvolupador modern. Hem après a utilitzar biblioteques HTTP, a processar dades JSON i XML, i a gestionar errors. Amb aquests coneixements, estàs preparat per crear aplicacions que es comuniquin eficaçment amb altres serveis a través d'Internet.
Curs de Programació Delphi/Object Pascal
Mòdul 1: Introducció a Delphi/Object Pascal
- Introducció a Delphi i Object Pascal
- Configuració de l'Entorn de Desenvolupament
- Primera Aplicació Delphi
- Sintaxi i Estructura Bàsiques
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control i Procediments
- Declaracions Condicionals
- Bucles i Iteració
- Procediments i Funcions
- Abast i Durada de les Variables
- Gestió d'Errors i Depuració
Mòdul 3: Treballant amb Dades
- Arrays i Cadenes
- Registres i Conjunts
- Tipus Enumerats i Subrang
- Gestió d'Arxius
- Accés a Bases de Dades
Mòdul 4: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Herència i Polimorfisme
- Interfícies i Classes Abstractes
- Gestió d'Excepcions en POO
Mòdul 5: Funcions Avançades de Delphi
- Generics i Col·leccions
- Multifil i Programació Paral·lela
- Desenvolupament Basat en Components
- Biblioteca d'Execució de Delphi (RTL)
- Tècniques Avançades de Depuració
Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX
- Introducció a VCL
- Creació de Formularis i Controls
- Programació Basada en Esdeveniments
- Introducció a FireMonkey (FMX)
- Desenvolupament Multiplataforma amb FMX
Mòdul 7: Desenvolupament Web i Mòbil
- Desenvolupament Web amb Delphi
- Serveis RESTful
- Desenvolupament Mòbil amb Delphi
- Desplegament d'Aplicacions Mòbils
- Integració amb Serveis Web
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Organització del Codi i Documentació
- Patrons de Disseny en Delphi
- Tècniques de Refactorització
- Proves Unitàries i Desenvolupament Basat en Proves
- Optimització del Rendiment