czwartek, 27 marca 2014

my struggle with code = matrix

W cyklu postów 'my struggle with code' postaram się opisywać problemy jakie napotkasz na co dzień podczas implementacji lub projektowania swoich systemów. Postaram się też podać gotową receptę na dany przypadek.
Dziś padło na marix variables. Termin ten związany jest często z implementacją REST API. Chcemy aby API restowe było 'piękne', czytelne czy funkcjonalne.

Tip : Zawsze dużo wysiłku wkładaj w projektowanie API. To trzon wszystkiego. Dobre API to 50% sukcesu.  


O co tu w ogóle chodzi?

chce tworzyć API na wzór  :
  //moremaps.com/map/color;lat=50;long=20;scale=32000
coś na kształt najlepszych obecnie API jak :

 LinkedIn API :
  /people:(id,first-name,last-name,industry)

FaceBook API :
  /slawomir.borowiec/friends?fields=id,name,picture
  /me?fields=hometown,address,birthday

Google API : 
 ?fields=title,media:group(media:thumbnail)

My API :
/category/{name}/desc='restAPI';location='warsaw'
/user/location/{district};ochota,praga,wola/{permission};business,user


W połączeniu ze wzorcem Tuple i  Dao możemy powiedzieć REST API jakie kolumny chcemy zwrócić, czy jakie parametry czy dane nas interesują.

Krótko - > Zajebiste...:)


Pomysł wydaje się prosty a rozwiązanie równie proste jak i oczywiste, ale jak zwykle napotkałem niespodziewane problemy.

W Spring 3.2.2 wszystko działa jak należy. Czyli przewidywalnie.

Ok. Teraz używam Spring 4.0.2 czyli największą stabilną i  aktualną wersją.
I mam problem. Matrix Variables nie działa jak potrzeba. Po prostu przestał parsować URL'a.
Dzieje się tak już od wersji 3.2.2 wzwyż . Np w wersji 3.2.3 już ten feature nie działa. Ok zaglądamy do dokumentacji.


Prototypując aplikacje używam Spring Boot'a. Dlaczego ? Bo tak trzeba:). Jest dużo prościej i zaoszczędza mi to w cholerę pracy. (O Spring Boot przeczytasz sobie tutaj)


Opierając się na Spring Boot odpalam swoje REST API. Druga sprawa nie chce używać wcale XML skoro specyfikacja JavaConfig ma już tyle lat i naprawdę teraz wydaje się być dojrzała.
Rozwiązanie zajęło mi trochę czasu - udało się w końcu :).
Poniżej jest recepta na pozbycie się gównianego xml i zastąpienie go odpowiednikiem w javie.

Tutaj znajdziesz kod z REST API + HATEOAS + NOSQL

1 komentarz:

  1. Dziękuję bardzo za pomoc z ze EnableUriMatrixVariableSupport! I dzięki Google Translate pozwoliłeś mi ją przeczytać;-). Proszę podać swój blog (także) w języku angielskim, musimy to! (this.GoogleTranslate())

    OdpowiedzUsuń