Mirki programistyczne od Javy, ale nie tylko,

chwalę się wydaniem wersji 1.0.0 biblioteki Tomoko mojego autorstwa. Zapraszam na stronę główną, gdzie zajdziecie przykłady jak i dokładny opis działania.

Każdy projekt wymaga modyfikacji danych. W przypadku REST API można skorzystać z żądań PUT lub PATCH. PUT załatwia sprawę, ale nie zawsze chcemy przesyłać cały stan zasobu, stąd i PATCH jest potrzebny. Żeby dla każdej właściwości danego zasobu nie tworzyć osobny PATCH endpoint
@b0lec: Wg specyfikacji PUT musi być idempotentny, a PATCH może.

Łatwiej to wytłumaczyć na przykładzie matematyki. Wartość bezwzględna abs(x) jest funkcją idempotentną, ponieważ kilkukrotne jej użycie daje ten sam wynik co jednokrotne, czyli abs(abs(x)) = abs(x).

PUT ustala cały stan danego zasobu. Jeśli zaraz po sobie przyjdą dokładnie dwa takie same żądania PUT to pierwsze z nich zmiany wprowadzi, natomiast drugie już nie będzie miało czego zmieniać. Brak będzie jakichkolwiek efektów,
@b0lec: ETag się ma bardziej do GET niż do PUT czy PATCH. To jest po prostu jakby numer/hash/timestamp aktualnej wersji zasobu pod danym URLem i słuzy do cache'owania zasobów po stronie klienta.

Klient wysyła żądanie GET o zasób i razem z nim dostaje jego aktualny ETag. Powinien gdzieś ten ETag zapisać. Po pewnym czasie zasób mógł się zmienić i klient ponownie wysyła żądanie GET, które będzie w nagłówku "If-None-Match" zawierało znany
#androiddev #java #android #retrofit #rxjava #rest #geojson

Witajcie mirki, mam nastepujacy problem:
Uzywam RxJava 2 z Retrofitem, do Retrofita uzywam tez RxJava2 adapter, aby moc zwracac z resta Observables, do tego uzywam convertera gson : "com.squareup.retrofit2:converter-gson". Moj problem polega na tym, ze zaszla potrzeba parsowania GeoJson i nie jestem pewien jak to ogarnac za pomoca tych narzedzi, ktorych uzywam. Na chwile obecna stworzylem sobie concrete model z tablica double gdzie laduje sobie
Jak powinienem zaimplementować obsługę zapytania POST w kontrolerze, który ma tworzyć nowy wpis do tabeli, która ma klucze obce? Wszystkie tutoriale pokazują tylko, żeby przekazać w RequestBody obiekt i odpalić save na repozytorium np tak:

@RequestMapping(method = RequestMethod.POST)
    public SeatReserved addItem(@RequestBody SeatReserved seatReserved) {
        seatReserved.setId(null);
        return repo.saveAndFlush(seatReserved);
    }

Problem w tym, że klasa SeatReserved, ma pola z innych tabel (Screening, Seat, Reservation):

@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;


    @ManyToOne
    @JoinColumn(name = "screening_id")
    Screening screening;
``````
    @ManyToOne
    @JoinColumn(name = "seat_id")
    Seat seat;
``````
    @JsonIgnore
    @ManyToOne(fetch=FetchType.LAZY)
@kornfan: jeśli wysyłasz same id, to sobie pobierz odpowiednie encje poprzez odpowiednie repozytoria na podstawie tych id i sklej ostateczny obiekt, wiadomo, że na podstawie samych id nie stanie się magia. Tak jak wspomniałem zobacz na hateos i format hal wykorzystywany choćby przez spring data rest, wtedy wysyłasz jsona typu:
{
"id": null,
"screening": "http://costam/api/screenings/1",
"reservation":"http://costam/api/reservations/123",
...
}
jeśli jednak nie używasz spring data rest, to wymaga to trochę pracy
#programowanie #webdev #rest

Mam dwa pytania odnośnie webserwisów/API.

1. Jak w zespole tworzy się dwie aplikacje np. w #java, które komunikują się przez REST (coś w stylu mikroserwisów) i w obu wykorzystuje się takie same klasy, to jak w praktyce to się rozwiązuje? Kopiuje się ręcznie klasy z jednego projektu do drugiego? A jak są zmiany, to sprawdza się GIT-a i znowu się kopiuje? Trochę słabe rozwiązanie.
Jak były WebServices (te
@mk321: Tworzysz obiekty transportowe (te które przesylasz po REST) i wspolną logikę jako oddzielny projekt, który będzie ładowany do jar'a jako biblioteka. Mówisz aplikacji A aby korzystała z tej biblioteki, tak samo aplikacji B. Oczywiście cały proces automatyzujesz aby przy kompilacji A lub B najpierw skompilowała się biblioteka.
@BlackySeth: czy w takim razie cache nie jest o jedną warstwę za wysoko? problem polega na tym, że próbujesz "naprawić" jedną niedogodność (cache) używając czegoś, co służy czemuś innemu (api), a z doświadczenia wiem, że choć takie rzeczy działają, to sprawiają później różnorakie problemy, od samego zrozumienia działania, przez testowanie, a na... wydajności skończywszy :)
@BlackySeth: to świetna idea. Kompletne rozdzielenie warstw aplikacji. Na tej zasadzie działają także mikroserwisy, które zyskują coraz większą popularność i chyba będą królowały w najbliższej przyszłości.
Robiliśmy w zespole kiedyś testy i niestety na serwerach PHP+Apache mieliśmy zbyt duże opóźnienia w odpytywaniu tego samego serwera rzędu 55ms na zapytanie, które rzutowały na sumaryczny czas odpowiedzi przy około 20 funkcjach na 1-1.5s dodatkowego czasu na odpowiedź. W webie to o 10 razy
Cześć!
Szukam osób do pracy przy #frontend w Krakowie. Praca niestety lokalnie. Ale dla portalu ktory owiedza kilkadziesiat milionow osob miesiecznie :)

Zakres prac:
Tworzenie landing page o natywny #javascript, #html5 i #css3.
Możliwość pracy w ramach projektu implementacji adservera Google (#doubleclick) w wersji komercyjnej.
Rozwój i utrzymanie aktualnych skryptów
Możliwość pracy również z wykorzystaniem frameworków #angularjs i #reactjs jak i dedykowanych bibliotekach komercyjnych pozwalających
Cześć!
Szukam osób do pracy przy #frontend w Krakowie. Praca niestety lokalnie. Ale dla portalu ktory owiedza kilkadziesiat milionow osob miesiecznie :)

Zakres prac:
Tworzenie landing page o natywny #javascript, #html5 i #css3.
Możliwość pracy w ramach projektu implementacji adservera Google (#doubleclick) w wersji komercyjnej.
Rozwój i utrzymanie aktualnych skryptów
Możliwość pracy również z wykorzystaniem frameworków #angularjs i #reactjs jak i dedykowanych bibliotekach komercyjnych pozwalających
Mirki, jest sobie backend w django wystawiający REST api. Korzystać z niego mają frontend webowy, aplikacja na ios i aplikacja na androida. Nie ma systemu userów - żeby korzystać z serwisu nie trzeba być użytkownikiem. Czy jest jakiś sposób w jaki można uniemożliwić lub znacznie utrudnić korzystanie z tego api klientom innym niż te 3 wymienione wcześniej?
#programowanie #django #python #rest
@morsik: moim zadaniem jest właśnie powiedzieć im, że jest to niemożliwe :)

JS to tak bardzo bliski uzytkownikowi frontend, że ciężko wymyślić mi sposób nawet na utrudnienie tego


Mi też, ale liczyłem, że jakoś jednak się da ( ͡° ͜ʖ ͡°)

Wielkie dzięki za wkład, duży plus dla Ciebie ++
napisalem juz podstawowe GPIO api do obslugi i sterowania moimi urzadzeniami, chcialbym teraz osadzic to wewnatrz restowego api - server na raspberry pi, tak zeby z telefonu moglbym wysylac zapytania na raspa i otrzymywal odpowiedzi lub by rasp wlaczal funckje urzadzen.

Pisalem juz raz web api w javie - spring mvc.
Zastanawiam sie czy mozna napisac proste api bez zadnej specyficznej struktury projektu. Tj kilka klasek w mainie jedna linijka - startRestApi()
Postanowiłem napisać skrypt do postowania komentarzy z commitów #cvs do naszej #jira w chmurze.
Co by udowodnić, że możemy jutro porzucić stary gówno system sprzed 20 lat.. #gnats :D FTW!

W sumie jedyne co potrzebuje to znaleść Issue po numerku i wyświetlić krótkie info i spytać czy to napewno do tego chcesz dodać informacje z CVS.

Jestem zielony w #rest i webowych, tak po chwili patrzenia (będzie z 2h) w #python znalazłem
Mirki startuję z restem, ale nie bardzo wiem jak podłączyć serwer w intellij.
Lecę tym tutorialem:
https://www.youtube.com/watch?v=skltzZH7i4w&index=11&list=PLqq-6Pq4lTTZh5U8RbdXq0WaYvZBz2rbn
I w okolicach 7:00 ten facet przechodzi w zakładkę serwery w Eclipse i sobie działa.
Jak to po kolei zrobić w IntelliJ? Wszystko do tego momentu zrobiłem z Mavenem i jest raczej ok, bo bez błędów przeszło, no ale nie wiem co dalej.
Ktoś/coś podpowie?
To jest w ogóle wykonalne na intellij community czy potrzebuję
Mam parę pytań odnośnie #spring i #springsecurity. Może ktoś będzie w stanie mi pomóc. Mam apkę w androidzie, do której chcę dorobić autoryzację używając #oauth z #googleapi. Następnie na podstawie access token'u, wysyłanego do springowego controller'a #rest chcę zrobić walidację tego tokenu. Myślałem o użyciu #springsecurity jednak nie do końca wiem jak miała by wyglądać autoryzacja w tym momencie. Stąd pytania: czy mogę w każdym requeście do spring dodać header
@lol_nope: w przyszłości będą zapisywane pozycje wyszukiwań dla usera i dodatkowo dojdzie kilka parametrów do modelu userposition, więc myślę, że pierwsza opcja jest całkiem spoko. W każdym bądź razie bardzo dziękuję Ci za odpowiedź!