Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WebBroker ve TMS Web Core ile REST WEB API Yaklaşımı 2
#1
İlk makale de REST yaklaşımı ile temel manipülasyon tekniklerini örneklendirmiştik. Örneğimizi biraz daha geliştirerek profil resmi ekleme özelliği ekledim. Haliyle bu durum dosya upload gibi süreçlerin dahil edilmesini gerektirdi. Ayrıca manipülasyon işlemleri için yeni bir HTTP metoduna sahibiz; PATCH. Bununla beraber GET metodu ile kaynağımızın istediğimiz alanına erişebilme imkanına da sahip olacağız.

Ik1r3en.png

Web Core ile yeni tasarım görünümü görseldeki gibi güncelledim.
Profil resimlerinin depolanması için WebBroker sunucusunun çalıştığı dizini kullanacağız. Bu bağlamda, profil resmi yüklendiğinde, sunucu dizininde gerekli kontroller ardından kullanıcı id 'ne ait klasör oluşturulmakta ve profil resmi bu dizin altına yüklenmektedir. Elbette veri tabanında BLOB türünde alan oluşturmak bir diğer seçenek olabilir. Örneğimizde jpg ve png formatlarını kullansak da bunların haricinde pdf ve benzeri dosyalar ile de çalışabilirsiniz. WebBroker tarafında dosya adı üzerinden MIME tespiti yapılmaktadır. Bu durum web uygulamasına ek olarak farklı özellikler eklemek isterseniz size yardımcı olacaktır.
Ufak bir açıklama yapmakta fayda olacaktır. Profil resmi için öncelikle kişi oluşturuyor ve sonrasında oluşturduğumuz kişi için profil resmi yüklüyoruz. Web Core tarafında tasarımı bu işleve uygun olarak hazırladım.

CustomersController modülünü kontrol eden yeni kod bloğumuz aşağıdaki gibi güncellenmiştir.

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
 CustomersController: TCustomersController;
 ControllerResult: TControllerResult;
 ActionPath, id, field: String;
 PathSections: TArray<String>;
begin
 if Request.MethodType in [mtGet, mtPost, mtPut, mtDelete, mtPatch] then
 begin

   CustomersController := TCustomersController.Create;
   try
     ActionPath := TWebActionItem(Sender).PathInfo.Replace('*', '');
     PathSections := Request.PathInfo.Replace(ActionPath, '').Replace('/', '', [rfIgnoreCase]).Split(['/']);
     if Length(PathSections) > 0 then
       id := PathSections[0];
     if Length(PathSections) > 1 then
       field := PathSections[1];

     case Request.MethodType of
       mtGet:
         ControllerResult := CustomersController.Select(id, field);

       mtPut:
         ControllerResult := CustomersController.Update(id, Request.Content);

       mtPost:
         if Request.Files.Count = 0 then
           ControllerResult := CustomersController.Insert(Request.Content)
         else
           ControllerResult := CustomersController.UpdateWithField(id, field, Request.Files[0].FileName, Request.Files[0].Stream);

       mtDelete:
         ControllerResult := CustomersController.Delete(id);

       mtPatch:
         ControllerResult := CustomersController.UpdateWithField(id, field, Request.Content);
     end;

     Response.StatusCode := ControllerResult.StatusCode;
     Response.ContentType := ControllerResult.ResponseType;
     Response.ContentStream := ControllerResult.Response;
   finally
     CustomersController.Free;
   end;

 end
 else
   Response.StatusCode := 405;
end;
WebBroker ile dosya transfer işlemlerini gerçekleştirmek için uses bölümüne Web.ReqMulti birimini tanımlıyoruz. Bu sayede Request.Files özelliği ile sunucuya upload edilen dosyalara erişebiliyoruz. Request.Files.Count ile kaç adet upload işlemi olduğunu, Request.Files[0].FileName ile upload edilen dosya adını ve yine TMemoryStream(Request.Files[0].Stream) gibi sarmalama ile upload edilen dosyayı kaydetme işlemlerini gerçekleştirebilmekteyiz.

TMS Web Core tarafında ise WebFilePicker bileşeni kullanıyoruz. Birden fazla dosya upload işlemine de olanak sağlayan bu bileşen kolay bir kullanıma sahip. WebFilePicker bileşenini forma eklediğinizde ve uygulamayı çalıştırdığınızda kendi özel görünümünü kullanmaktadır. Örneğimizde ise onu gizleyerek Profile Resmi butonu ile tetiklemekteyiz. Dosya seçmemizin akabinde WebFilePicker bileşeninin Change olayı tetiklenecek ve bizde burada upload işlemini gerçekleştireceğiz. Bileşen, upload işleminde oluşabilecek hata gibi olayların yanı sıra transfer edilen bayt miktarı hakkında bilgi sağlayan ayrıntılı bir olay listesine sahip.

procedure TForm1.WebFilePicker1Change(Sender: TObject);
begin
 if WebFilePicker1.Files.Count > 0 then
 begin
   WebFilePicker1.Files[0].Upload(FURI + '/' + GetId + '/picture');
 end;
end;

WebBroker sunucusuna Postman üzerinden dosya göndererek süreci test edelim.

UxP0iRm.png


Görüldüğü üzere upload işlemi gerçekleştirdik ve neticesinde sunucu tarafından 201 durum kodu ile kaynağın oluşturulduğuna dair yanıt aldık.

Şimdi oluşturduğumuz kaynağa erişmeye çalışalım. Haliyle GET metodunu kullanıyoruz. URI alanına dikkat ederseniz userId den sonra picture ifadesini görecekseniz. Yazının başında belirtiğimiz gibi GET metodu ile artık kaynağın istediğimiz alanına direk olarak erişebiliyoruz ki bu aynı zamanda customers tablosunun field 'ını ifade eder.


wL0wUCf.png



Son olarak ele alacağımız PATCH metodu. Hatırlarsanız ilk makale de kaynakta değişiklik yapmak istediğimizde PUT metodunu kullandığımızı ifade etmiştim. Bu metot ile tek seferde tüm alanlar bazında güncelleme işlemi gerçekleştirebilmekteyiz. Fakat bazen güncelleme tek bir alan bazında yapılmak istenebilir. Buradaki örnekden bağımsız, bir stok uygulaması için ürüne ait mevcut ürün adedini azaltmak/artırmak gibi işlemler söz konusu olabilir. REST yaklaşımında kaynak üzerindeki bu tarz kısmi güncellemeler için PATCH metodu kullanılmaktadır.

dSQe4c4.png


WebBroker ve Web Core tarafındaki son güncellemeleri içeren kaynak kodlar makale ekinde mevcuttur. Faydalı olması dileğiyle.


Ek Dosyalar
.zip   WebBrokerAndWebCore.zip (Dosya Boyutu: 1,39 MB / İndirme Sayısı: 12)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  TMS Web Core - WebHttpRequest ile istek dönmüyor RAD Coder 3 191 10-05-2024, Saat: 10:20
Son Yorum: rmzgenius
  TMS Web Core - Genel Bakış rmzgenius 64 20.470 08-05-2024, Saat: 10:04
Son Yorum: skilinc
  TMS Web Core - Database bcore 6 985 13-04-2024, Saat: 08:12
Son Yorum: erol.micset
  WebBroker ve TMS Web Core ile REST WEB API Yaklaşımı delphi.developer 3 474 14-02-2024, Saat: 15:22
Son Yorum: parlakcuma
  TMS Web Core : Güzel Özellikler-2 rmzgenius 13 3.577 08-01-2024, Saat: 11:57
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi