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

Murat Kemal BAYGÜN

December 06, 2014
Tweet

Other Decks in Programming

Transcript

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

    Bilişim Teknolojileri AŞ - COO www.lab2023.com [email protected] @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 - 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
  8. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  9. 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ı)
  10. 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
  11. RESTful - Değişmeyen Arayüz HTTP eylemleri Create Post Read Get

    Update Put Destroy Delete URI: http://www.example.com/urunler
  12. 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
  13. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  14. 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
  15. 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
  16. @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
  17. 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
  18. @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
  19. 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
  20. Sırada • Web Servisi • REST • RESTful • JAX-RS

    Hakkında • JAX-RS Kullanım Örnekleri
  21. 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; } }
  22. 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; }
  23. 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); }
  24. 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; }
  25. 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; }
  26. 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; }
  27. • 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
  28. 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