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.

 

Dawid Ryłko

Lubię dobre filmy, gry oraz kawę. W pracy front-end, po godzinach wszystko inne.

 
Współpraca:
Polski Front-End