nimsi » posted to nimsi, programming, and developers
Open-source projesi olan var mi ya? katilayim
java, azcik scala da olur ‎- nimsi
c#, php, node de olur ama onlarda biraz paslandim, code-review gerekir bolca ‎- nimsi
angularjs de yazarim her ne kadar UI ile eskisi kadar ilgilenmesem de ‎- nimsi
benim bir türlü baslayamadigim bi porojem var, baslarsam davet ederim seni, ya da fikri vereyim sen yap asjdakjdkaj :) ‎- selim varank
anlat abi dinliyorum :) ilgimi çekerse katılırım ‎- nimsi
Spring frameworkünü bilirsin, bu frameworke eklemlemek üzere söyle bisi yapmak istiyorum yaklasik 1,5 senedir. Microservice olayi hype oldugundan spring'de bu yönde gelistirmeler yapti kendi icinde, spring boot, spring cloud vs. fakat microservislerin arasindaki iletisimi saglamak icin epey fazla boilerplate kod yazmak gerekiyor. Iste servis tarafina ek olarak bir RestServis arayüzü, client tarafina bir RestTemplate ile client kodlamak filan gerekiyor. Sonra tabii mappingiydi, exception handlingiydi bir ton ek masrafi var. Benim fikrim hem istemci hem de sunucu tarafinda spring kullaniliyorsa bu iskenceyi sonlandirmak üzere. Diyelim bir SearchService sinifimiz var. Bu normalde spring icinde @Service ile annote ediliyor ki, spring bu sinifi bir servis olarak algilasin ve ona göre spring container'inda initialize etsin ve gerektiginde inject etsin filan. Bu sinif normalde dev bir proje icinde ve biz simdi microservice architecture'a gecmek istiyoruz, servisi ayirmak istiyoruz. O halde tek bir annotasyon ekleyerek bu isi cözebilecegiz (biz bu projeyi hayata gecirebilirsek): @RemoteService. Spring bu annotasyonu görünce diyecek ki: "Aha! bir remote service, buna hemen bir rest arayüzü generate edelim, jackson'u filan baglayalim, her bisiyi hazirlayalalim." Ve tadaaa! Artik elimizde otomatik generate edilmis bir rest arayüzü var. Bu arayüzü dilersek non-java istemci ile, dilersek herhangi bir rest kütüphanesi ile cagirabilecegiz. Diger taraftan ana projemizde artik bir SearchService yok, ee orada bu SearchService'i kullananlar icin de söyle bir yöntem izleyecegiz: Varolan kodda kesinlikle bir degisiklik gerekmeyecek onlar yine @Autowirde SearchService searchService; diyerek servise ulasacaklar. Peki nasil. Yapmamiz gereken iki sey var, biri SearchService bagimliligini (bu arada tabi SearchService icin ayrica bir thin client-api bagimliligi olusturmak lazim) yazip, ardindan ApplicationConfiguration'a gidip bir SearchService bean'i tanimlayacagiz ve burada iste bu Bean varya bu bean aslinda remote diyecegiz @ServiceProxy adinda bir annotasyonla. Sprin bu annotasyonu görür görmez cakacak bir proxy ki bu kendi icinde aslinda bir rest template olacak ve diger tarafta generate edilmis rest api'sinin aynisini generate edecek ve searchService'e gelen tüm callari remote service'e yönlendirecek. Iste proje bu :) ‎- selim varank
bunun ayrintilarini bi baska feedde konusmustuk sanirim bulursam göndereyim ‎- selim varank
abu suradaki zimbirtilar tam olarak o isi yapmiyor mu? http://docs.spring.io/spring/docs/current/spring-framework-re... ‎- nimsi
hatta bak ornege link vereyim direct accessing a ws - http://docs.spring.io/spring/docs/current/spring-framework-re... ‎- nimsi
apache cxf de yapiyor bunu http://cxf.apache.org/docs/jax-rs-client-api.html :) ‎- nimsi
@nmcy: yapiyor ama json ve rest olarak degil. bunun da söyle sorunlari var: "The above is slightly simplified in that JAX-WS requires endpoint interfaces and implementation classes to be annotated with @WebService, @SOAPBinding etc annotations. This means that you cannot (easily) use plain Java interfaces and implementation classes as JAX-WS endpoint artifacts; you need to annotate them accordingly first. Check the JAX-WS documentation for details on those requirements." ‎- selim varank
abi herhangi bir servisi hangi standard a gore rest olarak yayinlayacaksin, zaten bi rest-endpoint olusturman gerek. ben sadece isin client tarafi basit demek istedim. yoksa server tarafi her turlu uzun is. URLleri belirlemen lazim, get mi olacak post mu olacak vs. vs. o is oyle basina remoteservice yaz bitsin diyerek halledemezsin. ha elince interface varsa, client tarafi daha basit yukardaki ornekler gibi ‎- nimsi
@nmcy: cıx apache cxf gayet sıradan bir rest client, benim önerdiğim yöntem abstraction'ın bir üst seviyesi. bu yeni katman sayesinde sıradan bir java developerı hiç http, rest, cart curt işlerine girmeden normal hayatına devam edebilecek. özellikle de exception handling olayında isler cok kolaylasacak. ‎- selim varank
@nmcy: iste get mi olacak post mu olacak kısmına ister otomatik karar ver, ister sen karar ver seklinde bir strateji belirleyeceğiz. REST tehammüllerine uymaya gerek yok sen otomatik generate et dersen mesela, vericek bütün metodlar için POST'u path'ı filan kendi generate edecek belli bir naming strategy esliğinde. Yok ben kendim karar vericem dersen normalde kullanılan annotasyonlarla path ve method belirleme isi filan developer'a bırakılır, gerekirse bir service discovery şeysi ile clientin bu rest arayüzlerini kolayca bulması saglanır ‎- selim varank
özellikle "ye benim için non-java veya 3rd parti istemciler hiç önemli değil, benim için microservislerim kendi aralarında http üzerinden makul sekilde konusabilseler yeterli" diyenler için muhteşem bi kolaylık olur bu. hele hele spdy ile connectionları da verimli kullanabilirsek baya baya performanslı bir remote call kütüphanesi yapmış oluruz. jackson'ın serializing/deserializing performansı zaten epey iyi ‎- selim varank
@Repository olanlari Rest endpoint'e cevirmek icin su var, http://docs.spring.io/spring-data/rest/docs/current/api/org/s... tam olarak senin dedigin gibi calisiyor. ama @Service icin var mi bilmiyorum. Bak bi istersen ‎- nimsi
Hatta ornek kullanimini istersen sunu buldum bak -> http://spring.io/guides/gs/accessing-data-rest/#_create_a_per... ‎- nimsi
Herhangi bir servisi de kisaca rest-endpoint yapmak icin de @Service yerine @RestController diyip iligli methodlara da @RequestMapping eklemek yeterli kanimca v__v ‎- nimsi
ya dusundum de ne gereksiz muhalefet ettim ya sen yap kanka yine de :D ‎- nimsi
abi söylediklerin yanlis seyler degil, güzel muhalefet ediyorsun ama kacirdigin bir nokta var. RepositoryRestResource spring-data projesinden, herhangi bir datasource'a rest api üzerinden ulasabilmemizi sagliyor. Servis degil, direk data ve bana microservice architecture'da faydasi cok yok, cünkü client tarafinda yine bütün handlingi ben yapicam, pathi ben yazicam, cok is degil gibi görünüyor ama cok is, cünkü error prone bi is, özellikle hata oldumu isler karisiyor. bütün bunlari framework yapsin, ben isime odaklanayim, microservice architecture'a gececez diye anamiz aglamasin, iki annotasyon, iki configurasyon ile siradan spring servislerini remote servis yapabileyim :) ‎- selim varank
@nmcy: @RestController diyip iligli methodlara da @RequestMapping eklemek yeterli kanimca v__v ‎- nmcy zaten bugün böyle yapiyoruz, servisi kendi haline birakip ayni servisin üzerine bir wrapper rest service tanimliyor bu wrapper'a @RestController annotasyonu ekleyim mappinglerini, metodlarini, filan tanimliyoruz. Public Rest Api yapiyorsan dogrusu da bu zaten, ama sirf organizasyonel bir bölünme icin microservis isine giriyorsan, bunlar hep bosuna yük ‎- selim varank
spring frameworkun ana amaci boilerplate kodu engellemek zaten, dolayisi ile böyle bisiyi yapsak direk ana projeye alinir :) ‎- selim varank
2014'ten beri bir milim ilerlemeyen Zemberek projesini Office uygulamaları için plugin, browser'lar için addon/extension haline getirebilirsen çok işe yarar. MS Office'in Grammar&Spell Checker'ı Türkçe bilmiyor. Zaten bozuk olan dili daha da bozuyor. ‎- thef
Abi benim proje iptal yapmislar bile: http://projects.spring.io/spring-cloud/spring-cloud.html#spri... Oh dostum dostum ‎- selim varank
https://github.com/Netflix/feign ;_; zaten baska birinin aklina gelmemis olmasi mümkün degildi :) ‎- selim varank