Share
Embed
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
Transcript
33 slides
-
JAX-RS ile RESTful Java Web Servisleri Murat Kemal BAYGÜN Lab2023
Bilişim Teknolojileri AŞ - COO www.lab2023.com [email protected] @baygunm -
Bu sunumda • Web Servisi • REST • RESTful •
JAX-RS Hakkında • JAX-RS Kullanım Örnekleri -
Sırada • Web Servisi • REST • RESTful • JAX-RS
Hakkında • JAX-RS Kullanım Örnekleri -
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. -
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. -
Sırada • Web Servisi • REST • RESTful • JAX-RS
Hakkında • JAX-RS Kullanım Örnekleri -
REST REST = REpresentational State Transfer Amerikalı Bilgisayar Bilimci Roy
Thomas Fielding 2000 yılında Doktora Tezi -
REST REST Mimarisi Web servislerinin geliştirilmesi için de uygulanmıştır Mimari
bir stildir Kaynak bazlıdır Gösterimleri destekler -
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 -
REST - Gösterimler Kaynak durumunun sunucu istemci arasında transferi En
yaygın JSON ve XML (CSV, HTML vs.) -
Sırada • Web Servisi • REST • RESTful • JAX-RS
Hakkında • JAX-RS Kullanım Örnekleri -
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ı) -
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 -
RESTful - Değişmeyen Arayüz HTTP eylemleri Create Post Read Get
Update Put Destroy Delete URI: http://www.example.com/urunler -
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 -
Sırada • Web Servisi • REST • RESTful • JAX-RS
Hakkında • JAX-RS Kullanım Örnekleri -
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 -
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 -
@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 -
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 -
@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 -
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 -
Sırada • Web Servisi • REST • RESTful • JAX-RS
Hakkında • JAX-RS Kullanım Örnekleri -
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; } } -
JAX-RS Kullanım Örnekleri Employee.java @Path(value="/employees") public class Employee extends BaseResource
{ public Employee() { super(); // Make needed initialization } ... } -
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; } -
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); } -
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; } -
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; } -
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; } -
• 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 -
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