Ratpack dla szybkich i czytelnych RESTów

Jeszcze niedawno Ratpack był rozwiązaniem hipsterkim (co podkreśla domena .io), ale w O'Reilly wydali książkę Learning Ratpack i nieodwracalnie dołączył do mainsteamu. I słusznie, bo jest prostym, ale wielofunkcyjnym narzędziem, takim szwajcarskim scyzorykiem HTTP. Dla mnie chyba największą jego zaletą jest czytelność kodu. Po wejściu do klasy RatpackRestServer po roku, nie musiałam się zastanawiać, co się tam wydarzyło.

 Ratpack opiera swoje działanie o handlery. Handler jest opakowaniem dla funkcji działającym na zadanym kontekście. Implementuje tylko metodę handle(final Context ctx). Może zwrócić odpowiedź, albo wykonać swoją pracę i oddelegować kontekst, podając listę handlerów lub wywołać context.next(). Speech Rank póki co, używa jednego handlera, zarządzającego kontrolą dostępu (Access-Control), ale pewnie w przyszłości będzie potrzeba dodania innych.

public class CORSHandler implements Handler {

    @Override
    public void handle(final Context ctx) throws Exception {
        final MutableHeaders headers = ctx.getResponse().getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        headers.add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
        ctx.next();
    }
}

Pisanie endpointów ma bardzo niski próg wejścia. Serwer Ratpackowy z dwoma przykładowymi endpointami może wyglądać tak:

RatpackServer.start(server -> server
.handlers(chain -> chain
    .all(new CORSHandler())
    .post("api/comment", ctx ->
        ctx.parse(Comment.class).then(comment -> {
            conferencesRepo.add(comment);
            ctx.render(json(comment.getComment()));
        }))
    .get("api/conference/:id", ctx -> {
        ctx.render(json(conferencesRepo.getConference(ctx.getPathTokens().get("id"))));
      })
));

Inne rzykłady znajdziesz w dokumentacji. Dużym plusem tego zestawu bibliotek jest łatwość testowania, ale testy zasługują na osobnego posta!

Komentarze

Popularne posty z tego bloga

Jeśli jesteś najmądrzejszą osobą w pokoju, to jak najszybciej zmień pokój!

Kto jest bardziej inteligentny od Ciebie?

Fastline dla kobiet w IT? Nie, dziękuję.