Forum > Lazarus e il web

Progetto Rest Api Json

(1/2) > >>

slapshot:
Ciao a tutti, mi rivolgo a voi per avere qualche consiglio. Sto rovistando internet in lungo e in largo, le soluzioni sono molteplici ma se riesco ad avere un indirizzamento da chi è più esperto, probabilmente, risparmio del tempo.

Quello che vorrei fare è scrivere un front-end per un server rest api di serrature automatiche. Espone diverse API, ovviamente. Con curl da terminale linux riesco ad ottenere quanto mi occorre, token ecc.. Ma mi piacerebbe usare fpc per poter effettuare interrogazioni ed impartire comandi al server rest api. Trovo difficile capire come imbastire il tutto, quali classi usare, se usare o meno un framework tipo Mormot (il progetto potrebbe diventare ben più complesso della semplice interrogazione ma volerei basso all'inizio). Esempio:


--- Codice: ---
curl --location -g --request POST 'https://euapi.ttlock.com/oauth2/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urapisciener.com/v3/lock/list' 'clientId=xxxxxxxxxxxxxxxx' --data-urlencode 'clientSecret=xxxxxxxxxxx' --data-urlencode 'username=xxxxxxxxxxxxxxxxxxx' --data-urlencode 'password=xxxxxxxxxxxxxxxxxxxxxxxxx'

--- Termina codice ---

da shell riesco ad ottenere un response facilmente. Stavo provando a capire come usare fpHTTPClient ma non riesco a capire come impostare header e poi il resto dei parametri. Se mi date un suggerimento, link ecc.. provo a codificare qualcosa.

Grazie

DragoRosso:
Questo progetto può aiutarti. E' fatto per ChatGPT, ma puoi prendere spunto per altri ... il concetto non è dissimile.

Ciao

nomorelogic:
se devi interrogare un server rest, ti consiglio prima di tutto di guardare quello che offre lazarus/fpc
personalmente uso (intensamente, pesantemente e da parecchio tempo) il client http contenuto nella unit fphttpclient che trovi nei sorgenti del Free Pascal

come uses


--- Codice: ---
implementation

uses opensslsockets,
     fphttpclient,
     openssl,
     fpjson;


--- Termina codice ---

ed una funzione (GET semplice, se dovesse servire posso mettere anche un esempio per passare i dati nel body per le richieste POST)


--- Codice: ---
function TClientMagazzino.GiacenzaArticolo_Leggi(const id: string): boolean;
var Client: TFPHttpClient;
    sURL: string;
begin
   // init
   result := False;
   FResponse:='';
   FError:='';

   // esegue richiesta
   Client := TFPHttpClient.Create(nil);
   try
      // headers
      Client.RequestHeaders.Add('Content-Type: application/json');
      Client.RequestHeaders.Add('Content-Type: text/plain');

      // compone URL richiesta
      sURL := Format('https://%s:%s@%s/%s/%s/%s',
                  [ FRequestParams.ApiKey,
                    FRequestParams.ApiPdw,
                    FRequestParams.AccountHandle,
                    FRequestParams.ApiRoute,
                    FRequestParams.ApiVersion,
                    'inventory_levels.json?inventory_item_ids={'+id+'}' ]);

      // simple get
      try
         FResponse := Client.SimpleGet(sURL);
         result:=True;
         HttpCode:=Client.ResponseStatusCode;
      except
        on e: exception do begin
           result:=False;
           FResponse:='';
           FError:=e.Message;
        end;
      end;

   finally
     FreeAndNil(Client);
   end;

end;

--- Termina codice ---



Edit:
m'era sfuggito leggendo il tuo post che stavi proprio guardando fpHTTPClient
meglio così, credo che sia il giusto punto di partenza :)

DragoRosso:
Anche l'esempio che ho postato è (a parte il condimento grafico) con fhttpclient.

nomorelogic:
comunque gli header si impostano come vedi nel codice che ho postato

i vari
--- Codice: ---
--data-urlencode
--- Termina codice ---
vanno a far parte dell'URL nella sezione query, dopo il '?' (puoi fare riferimento a Format..)

--data (o -d) va a finire nel body (devi usare un TStream ma posso fornirti del codice di esempio)

non ho capito il parametro
--- Codice: ---
--data-urapisciener.com/v3/lock/list'
--- Termina codice ---

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa