HTTP methods z Go i MongoDB – część 2 – GET

Dobrze zaplanowana praca, to podstawa. W poprzedniej części HTTP methods, nauczyliśmy się tworzyć produkty, za pomocą metody POST. W tym wpisie czas na pobieranie listy produktów oraz pojedynczego produktu po ID.

Dzięki tym trzem endpointom będziemy mogli skutecznie i efektywnie rozpocząć pracę nad front-endem naszej aplikacji.

HTTP methods – GET

Do pobierania elementów z bazy MongoDB użyjemy pakietów net/http, gorilla/mux oraz mgo.v2/bson. Do przetworzenia i wyświetlenia danych przydadzą się nam dodatkowo pakiety encoding/json oraz fmt.

Pobieranie listy produktów – getAll()

Zacznijmy od pobierania listy produktów. Metoda getAll(), którą za chwilę stworzymy, umożliwi nam wyświetlenie listy wszystkich produktów. Nie skupiam się na paginacji, filtrowaniu czy sortowaniu. Podobnie jak w poprzednim wpisie, na razie, interesuje mnie minimalna funkcjonalność.

Analogicznie, jak w poprzednim wpisie, na początku, tworzymy metodę getAll(), która jako parametry przyjmuje http.ResponseWriter oraz *http.Request. Po czym, na bazie struktury Products tworzymy lokalną zmienną o tej samej nazwie.

Całą “magię” załatwia za nas odpowiednie zapytanie do bazy danych: server.GetSession().DB("shopping-manager").C("products").Find(nil).All(&products)

Korzystamy ze stworzonego wcześniej lokalnego pakietu server i metody GetSession. Całość bazuje na pakiecie mgo.v2.  Po otwarciu sesji, wybraniu bazy danych oraz kolekcji, używamy metod Find i All, by wylistować wszystkie elementy z kolekcji.

Dodajemy jeszcze warunek, że jeżeli niczego nie znajdziemy, to endpoint odpowie nam statusem 404 - NOT FOUND. W przeciwnym wypadku standardowa odpowiedź czyli 200 - OK wraz z nagłówkiem "Content-Type", "application/json".

Na koniec zaprezentujmy wynik naszej pracy w formacie JSON, w czym pomoże nam metoda Marshal z pakietu encoding/json. Pamiętajmy o użyciu blank identifier.

Prezentacja odpowiedzi w Postmanie:

Postman - GET method- HTTP

Pobieranie produktu po ID – get()

Pobieranie produktu po ID, jest analogiczne jak powyższy przykład.

Potrzebujemy dodatkowo pobrać odpowiedni ID. Z pomocą przyjdzie nam, znana już paczka, gorilla/mux. Za pomocą metody Var, jesteśmy w stanie stworzyć obiekt params. Następnie zwracamy ObjectId w postaci hexa.

Przygotowana przez nas zmienna oid, pozwoli nam na przeszukanie kolekcji za jej pomocą. Zakładając, że ID w bazie są unikalne używamy metody Find, gdzie jako parametr przekazujemy oid, następnie wyciągamy znaleziony produkt.

Warto przy tej okazji pokazać jak zbudowany jest nasz endpoint: server.Router.HandleFunc("/product/{id}", get).Methods("GET").

Na koniec, standardowo, odpowiedź z Postmana:

Postman - GET by ID method- HTTP

Podsumowanie

Po pierwszych dwóch tygodniach pracy z językiem Go jestem bardzo zadowolony z jej efektów. Pisanie w tym języku jest bardzo szybkie i efektywne. W miarę poznawania kolejnych pakietów, odkrywając strukturę języka i poznając dobre praktyki mam wrażenie, że język ten został napisany specjalnie dla mnie. Tym nieskromnym stwierdzeniem zamykam, na tydzień, pracę nad backendem mojej konkursowej aplikacji Shopping Manager.