Merhaba,
REST kullanan Web Servisler birden fazla şekilde sizden parametre gönderimi isteyebilirler.
1- Standart bir REST Web Servisi aşağıdaki şekilde kullanabilirsiniz.
Bunu uygulamanıza aşağıdaki bileşenleri ekleyip birbirleri ile ve web servis ile ilgili ayarlamaları yaptıktan sonra gerçekleştirebilirsiniz.
TRESTClient
TRESTRequest
TRESTResponse
RESTClient.Url bilgisini doldurmanız gerekli.
RESTRequest.Params içini doldurmanız gerekli
Bunları yaptıktan sonra Delphi içinde RESTRequest üzerinde fare sağ tuş ile tıklayın ve Execute seçeneğini seçin. Eğer girdiğiniz bilgiler doğru ise RESTRequest.Content içinde Web Servis cevabını bulabilirsiniz.
2- Diğer taraftan bazı REST Web Servisler talepte bulunurken parametre kullanımı yerine parametreleri bir json string şeklinde isteyebilirler sizden. Bu durumda yukarıdaki yöntemi kullanamazsınız. Bu tür işlemler için aşağıdaki gibi bir kod yazmanız gerekecektir:
Kod: Tümünü seç
uses
IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
uses
IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
procedure TForm1.Button1Click(Sender: TObject);
var
Response, JsonString: string;
lRequest: TStringStream;
Http: TIdHTTP;
begin
lRequest := TStringStream.Create(JsonString, TEncoding.UTF8);
try
Screen.Cursor := crHourGlass;
Http := TIdHTTP.Create(nil);
try
Http.Request.ContentType := 'application/json';
Http.Request.CharSet := 'utf-8';
try
// Sorgulama yapan bileşen
Response := Http.Post('url', lRequest);
except
on E: Exception do
begin
ShowMessage('*** İletişim hatası: ' + E.Message);
end;
end;
finally
Http.Free();
end;
finally
lRequest.Free();
end;
end;
Bu noktada örnekler Indy10 üzerinden verilmiştir. Eski sürüm kullanıyor iseniz aşağıdaki linkten son sürümünü indirebilirsiniz.
http://www.indyproject.org/Sockets/wiza ... rd.EN.aspx
Sizin verdiğiniz örnek daha çok 1 numaralı kullanım şekline uygun gözüküyor. Eğer Delphi 10.1 Update 2 kullanıyor iseniz. Delphi'nin bu sürümünde 1 numaralı kullanım şekilden kaynaklı bir hafıza kaçağı vardır. RESTRequest.Execute() iki kez çalıştırılıp her iki çalıştırmada da cevap alınır ise (boş bilgi dışında bir RESTResponse.Content içi dolar ise) uygulama kapatıldığında hafıza kaçağı oluşmaktadır.
Bu problemin Embarcadero tarafından ileriki Delphi sürümlerinde düzeltilmesini beklemek zorundayız.