Italian community of Lazarus and Free Pascal

Programmazione => Lazarus e il web => Topic aperto da: slapshot - Marzo 08, 2024, 05:27:11 pm

Titolo: Progetto Rest Api Json
Inserito da: slapshot - Marzo 08, 2024, 05:27:11 pm
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: [Seleziona]
 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'

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
Titolo: Re:Progetto Rest Api Json
Inserito da: DragoRosso - Marzo 08, 2024, 05:35:31 pm
Questo progetto può aiutarti. E' fatto per ChatGPT, ma puoi prendere spunto per altri ... il concetto non è dissimile.

Ciao
Titolo: Re:Progetto Rest Api Json
Inserito da: nomorelogic - Marzo 08, 2024, 06:41:40 pm
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: [Seleziona]
implementation

uses opensslsockets,
     fphttpclient,
     openssl,
     fpjson;


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

Codice: [Seleziona]
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;



Edit:
m'era sfuggito leggendo il tuo post che stavi proprio guardando fpHTTPClient
meglio così, credo che sia il giusto punto di partenza :)
Titolo: Re:Progetto Rest Api Json
Inserito da: DragoRosso - Marzo 08, 2024, 07:13:34 pm
Anche l'esempio che ho postato è (a parte il condimento grafico) con fhttpclient.
Titolo: Re:Progetto Rest Api Json
Inserito da: nomorelogic - Marzo 08, 2024, 07:34:20 pm
comunque gli header si impostano come vedi nel codice che ho postato

i vari
Codice: [Seleziona]
--data-urlencode
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: [Seleziona]
--data-urapisciener.com/v3/lock/list'

Titolo: Re:Progetto Rest Api Json
Inserito da: slapshot - Marzo 08, 2024, 09:20:05 pm
Grazie a tutti, stavo proprio vedendo quelle unit e fpHTTPClient, molto potente.

Il parametro incomprensibile .. lo è realmente :D devo aver toppato a fare copia incolla. Mi sbatto un pò e poi semmai tornerò a chiedere aiuto ;).

Grazie
Titolo: Re:Progetto Rest Api Json
Inserito da: Stilgar - Marzo 09, 2024, 04:43:09 pm
Questo progetto può aiutarti. E' fatto per ChatGPT, ma puoi prendere spunto per altri ... il concetto non è dissimile.

Ciao


Stai addestrando ChatGPT , ma bravo ....
Titolo: Re:Progetto Rest Api Json
Inserito da: DragoRosso - Marzo 09, 2024, 05:25:41 pm
Questo progetto può aiutarti. E' fatto per ChatGPT, ma puoi prendere spunto per altri ... il concetto non è dissimile.

Ciao


Stai addestrando ChatGPT , ma bravo ....
No, era per l'account gratis di prova. Da browser ci si metteva sempre una vita, così era immediato.
Però ritenterò con Gemini, se riuscirò ad avere una chiave senza installare l'SDK  ::)
Titolo: Re:Progetto Rest Api Json
Inserito da: Stilgar - Marzo 09, 2024, 06:51:41 pm
E niente.... la fregola dell'AI ti ha preso.
Che poi ... vabbè. Mi taccio...