Italian community of Lazarus and Free Pascal

Programmazione => Lazarus e il web => Topic aperto da: Giampiero - Ottobre 10, 2019, 05:15:22 pm

Titolo: REST per Principianti
Inserito da: Giampiero - Ottobre 10, 2019, 05:15:22 pm
Salve a tutti
Ho una discreta esperienza con Delphi, ma per un progetto su Raspberry devo effettuare delle chaimate ad un WebServide di tipo REST, e la chiamata deve essere fatta in POST con Content-Type = application/json . Utilizziamo inoltre una Autenticazione BASIC.
Il fatto di dover sviluppare sotto Linux per Rasberry mi riduce la disponibilità di librerie, per cui girando ho trovato un progetto molto interessante di un Brasiliano (REST Dataware Componentes) che mi pare piuttosto diffuso come utilizzo ma di cui non riesco a trovare un tutorial decente (ci sono solo dei video in cui l'autore spiega in portoghese...)
Chiedo a tutti una mano, sia suggerendomi delle librerie meglio documentate oppure girandomi qualche esempio relativo alle librerie suddette....
grazie mille!!!
Titolo: Re:REST per Principianti
Inserito da: schumi - Ottobre 10, 2019, 07:37:54 pm
la più semplice credo sia fcl-web che trovi inclusa sia in Lazarus che FP.
eccoti un esempio di come faccio il login ad un servizio REST che restituisce il token, però trovi parecchi esempi nel forum ufficiale e nel wiki

ciao

Codice: [Seleziona]
procedure TfrmMain.Login;
var
  HTTPClient: TFPHTTPClient;
  AURL, sRisp: string;
  jData: TJSONData ;
  jItem: TJSONData ;
begin
  AURL := 'https://pagina_login' ;
  cToken := '' ;

  try
    HTTPClient := TFPHTTPClient.Create(nil);
    HTTPClient.AllowRedirect := True;
    HTTPClient.AddHeader('Content-Type', 'application/json');
    HTTPClient.RequestBody := TStringStream.Create('{"richiesta": {"username":"utente","password":"lamiapassword"} }');
    sRisp := HTTPClient.Post(AURL);

    if HTTPClient.ResponseStatusCode = 200 then begin
      jData := GetJSON(sRisp) ;
      jItem := jData.Items[0];

      if jItem.FindPath('esito').AsString = 'ERR000' then
        cToken := jItem.FindPath('token').AsString ;


    end else begin

      .....
    end;

  finally
    HTTPClient.Free;
  end;
end;