Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAX-RS ile RESTful Java Web Servisleri

JAX-RS ile RESTful Java Web Servisleri

Özgür Web Teknolojiler Günleri 2014 Kısa Bildirisi - JAX-RS ile RESTful Java Web Servisleri

6481db352bff3390c9ed586b11acd7a0?s=128

Murat Kemal BAYGÜN

December 06, 2014
Tweet

Transcript

  1. JAX-RS ile RESTful Java Web Servisleri Murat Kemal BAYGÜN Lab2023

    Bilişim Teknolojileri AŞ - COO www.lab2023.com murat.kemal.baygun@lab2023.com @baygunm
  2. Bu sunumda • Web Servisi • REST • RESTful •

    JAX-RS Hakkında • JAX-RS Kullanım Örnekleri
  3. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  4. Web Servisi W3C, web servisini, ‘bir ağ üzerinde birlikte çalışan;

    makine makine etkileşimini desteklemek üzere tasarlanmış yazılım sistemi’ olarak tanımlamıştır.
  5. Web Servisi Bir başka deyişle ise, Web’e bağlı uygulamalara, bir

    web sunucusu üzerinden program veya veri kombinasyonu sağlayan servislerdir denebilir.
  6. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  7. REST REST = REpresentational State Transfer Amerikalı Bilgisayar Bilimci Roy

    Thomas Fielding 2000 yılında Doktora Tezi
  8. REST REST Mimarisi Web servislerinin geliştirilmesi için de uygulanmıştır Mimari

    bir stildir Kaynak bazlıdır Gösterimleri destekler
  9. REST - Kaynak Bazlıdır Eylem değil Nesne Fiil değil İsim

    Ürün Kaynağı - Product Resource URIlerle tanımlanır http://www.example.com/urunler http://www.example.com/products
  10. REST - Gösterimler Kaynak durumunun sunucu istemci arasında transferi En

    yaygın JSON ve XML (CSV, HTML vs.)
  11. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  12. RESTful Bir Web servisine RESTful diyebilmek için şu mimari kısıtları

    sağlıyor olması gerekli • Değişmeyen Arayüz - Uniform Interface • İstemci - Sunucu / Client - Server • Durumsuz - Stateless • Önbelleklenebilir - Cacheable • Katmanlı Sistem - Layered System • Talebe bağlı kod - Code On Demand (İsteğe bağlı)
  13. RESTful - Değişmeyen Arayüz REST Servis tasarımının temelidir. İstemci ve

    Sunucu arasındaki arayüzü tanımlar Mimariyi sadeleştirir ve ayrıştırır İşlem HTTP eylemleri ile iletilir İstek URI ile yapılır HTTP cevabı döndürür
  14. RESTful - Değişmeyen Arayüz HTTP eylemleri Create Post Read Get

    Update Put Destroy Delete URI: http://www.example.com/urunler
  15. RESTful - Değişmeyen Arayüz HTTP Eylemi Tüm koleksiyon (/urunler) Belirli

    bir nesne (/urunler/:id) GET 200 OK - Tüm ürünlerin listesi 200 OK - tek ürün 404 Not Found - Verilen id yok veya geçersiz ise PUT 404 Not Found - Tüm koleksiyonu güncelleme istenmiyorsa 200 OK veya 204 No Content 404 Not Found - Verilen id yok veya geçersiz ise POST 201 Created 404 Not found DELETE 404 Not found - Tüm koleksiyonu silme istenen bir durum değil 200 OK 404 Not Found - Verilen id yok veya geçersiz ise
  16. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  17. JAX-RS Hakkında JAX-RS, RESTful Web Servisleri için Java API’sidir. JAX-RS

    Versiyon 1.1 ile birlikte resmi olarak Java EE 6’nın bir parçası olmuştur. JAX-RS bir kaynak sınıfını web kaynağı olarak eşleştirmeyi sağlar, bunun için ise bazı annotation’lar (belirtimler) kullanır
  18. JAX-RS Hakkında Java EE 7 ile birlikte JAX-RS Versiyon 2.0

    sunulmuştur Java EE 8 ile birlikte JAX-RS Versiyon 2.1 sunulması planlanmaktadır
  19. @Path - Kaynak sınıf veya metodu için göreceli yolu belirtir

    HTTP eylemleri @GET - Read @PUT - Update @POST - Create @DELETE - Destroy JAX-RS Hakkında - Belirtimler
  20. JAX-RS Hakkında - Belirtimler @Produces - Bir kaynağın üretebileceği ve

    istemciye geri gönderebileceği gösterim medya tiplerini belirtmek için kullanılır @Consumes - İstemci tarafından gönderilen; sunucunun kaynak için gösterim olarak beklediği, kabul ettiği medya tipini belirtir
  21. @PathParam - metod parametresini yoldaki bir kısma bağlar @QueryParam -

    metod parametresini HTTP sorgu parametrenin değerine bağlar @ApplicationPath - Uygulamanın URL eşleştirmesini belirtmek için kullanlır JAX-RS Hakkında - Belirtimler
  22. Satış Uygulaması - @ApplicationPath = /sales Sipariş Kaynağı - @Path

    = /orders http://www.example.com/sales/orders İnsan Kaynakları Uygulaması - @ApplicationPath = /hr Çalışan Kaynağı - @Path = /employees http://www.example.com/hr/employees JAX-RS Hakkında - Belirtimler
  23. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  24. JAX-RS Kullanım Örnekleri HumanResourcesApplication.java @ApplicationPath("/hr") public class HumanResourcesApplication extends Application

    { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(Employee.class); classes.add(LeaveRequest.class); classes.add(TravelRequest.class); return classes; } }
  25. JAX-RS Kullanım Örnekleri Employee.java @Path(value="/employees") public class Employee extends BaseResource

    { public Employee() { super(); // Make needed initialization } ... }
  26. JAX-RS Kullanım Örnekleri BaseResource.java @GET @Produces(value = "text/plain, application/json") public

    String getList(@Context UriInfo ui) { MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); String results = getResults(queryParams); return results; }
  27. JAX-RS Kullanım Örnekleri BaseResource.java @GET @Produces(value = "text/plain") @Path(value =

    "{id}") public String getById(@QueryParam("user") String user, @QueryParam("locale") String locale, @PathParam("id") int id) { UserInfo userInfo = new UserInfo(locale, user); BaseDVO record = getEmptyRecordById(id); if (id > 0) { BaseBO boObject = getBOInstance(userInfo); boObject.getRecord(record); } return convertToJson(record); }
  28. JAX-RS Kullanım Örnekleri BaseResource.java @PUT public Response update(String json) {

    Response retVal = null; BaseInfo info = convertToInfo(json); BaseBO boObject = getBOInstance(info.getUserInfo()); if(boObject.updateRecord(getRecord(info))) { retVal = Response.status(Response.Status.OK) .entity(boObject.getMessages()).build(); } else { retVal = Response.status(Response.Status.NOT_ACCEPTABLE) .entity(boObject.getMessages()).build(); } return retVal; }
  29. JAX-RS Kullanım Örnekleri Note.java @POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response upload(BufferedInMultiPart bimp)

    { Response retVal; NoteInfo noteInfo = parseNoteInfo(bimp); ... boolean success = noteBo.insertRecord(note); if(success) { retVal = Response.status(Response.Status.CREATED) .entity(noteBo.getMessages()).build(); } else { retVal = Response.status(Response.Status.NOT_ACCEPTABLE) .entity(noteBo.getMessages()).build(); } return retVal; }
  30. JAX-RS Kullanım Örnekleri Note.java @DELETE @Path(value = "{id}") public Response

    delete(@QueryParam("user") String user, @QueryParam("locale") String locale, @PathParam("id") int id) { Response retVal = null; UserInfo userInfo = new UserInfo(locale, user); NoteDVO note = (NoteDVO) getEmptyRecordById(id); NoteBO noteBo = new NoteBO(userInfo.getLocale()); if(noteBo.deleteRecord(note)) { retVal = Response.status(Response.Status.OK).build(); } else { retVal = Response.status(Response.Status.NOT_ACCEPTABLE).build(); } return retVal; }
  31. • Roy Thomas Fielding - Doktora Tezi ◦ http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm •

    Java EE7 Dokümantasyonu - JAX-RS ile Web Servisleri İnşaası ◦ https://docs.oracle.com/javaee/7/tutorial/jaxrs.htm • JSR 339: JAX-RS 2.0: RESTful Web Servisleri için Java APIsi ◦ https://jcp.org/en/jsr/detail?id=339 • JSR 339: JAX-RS 2.0 API Şartnamesi (Rev a) ◦ https://jax-rs-spec.java.net/nonav/2.0-rev-a/apidocs/index.html • JSR 370: JAX-RS 2.1 API Şartnamesi ◦ https://jcp.org/en/jsr/detail?id=370 Kaynaklar
  32. Lab2023 ve Açık Kaynakları • Lab2023 Web Sitesi ve Blog

    ◦ www.lab2023.com ◦ www.lab2023.com/blog • Lab2023 GitHub Organizasyonu ◦ github.com/lab2023 • Kebab Project - Agile toolbox for developers ◦ kebab-project.org
  33. Açık Kaynağı Seviyor ve Destekliyoruz