Wysłanie żądania HTTP jest kluczowe dla każdej aplikacji, która musi komunikować się przez Internet. Dowiedz się, jak wysyłać różne żądania HTTP za pomocą Go.

Jedną z podstawowych zasad rządzących funkcjonowaniem sieci World Wide Web jest wymiana zapytań i odpowiedzi. Gdy wysyłasz żądanie dostępu do strony internetowej, serwer odpowiada odpowiednimi danymi.

Popularne protokoły regulujące różne rodzaje komunikacji internetowej obejmują HTTP (protokół przesyłania hipertekstu), FTP (Protokół przesyłania plików) i SMTP (Prosty protokół przesyłania poczty).

HTTP to protokół, którego zwykle używasz podczas przeglądania strony internetowej lub korzystania z aplikacji internetowej. Możesz także pracować z żądaniami HTTP z wielu języków programowania, w tym Go.

Co to jest żądanie HTTP?

HTTP określa, w jaki sposób klienci, na przykład przeglądarki internetowe, wysyłają żądania do serwerów, które następnie zwracają odpowiedź. Żądanie HTTP zawiera informacje o zasobie, do którego klient próbuje uzyskać dostęp. Komunikat żądania zwykle zawiera adres URL, który identyfikuje zasób i inne opcjonalne dane, takie jak nagłówki i parametry zapytania.

instagram viewer

Tam są kilka typów żądań HTTP, w tym GET, POST, PUT, DELETE, HEAD, OPTIONS i CONNECT. Pierwsze cztery typy metod są najczęstsze; odzwierciedlają odpowiednio operacje CRUD, które są odczytywane, tworzone, aktualizowane i usuwane.

Typ żądania PUT jest często używany zamiennie z typem żądania PATCH. Osiągają ten sam cel, różnią się tylko danymi, które mają zawierać żądanie.

Wysyłanie żądań przy użyciu typowych metod HTTP

Go jest wbudowane http pakiet udostępnia zestaw funkcji i struktur, których można używać do tworzenia serwerów WWW i zarządzania żądaniami HTTP. Jest to bardzo solidny pakiet, a wszystkie frameworki Go opierają się na nim w taki czy inny sposób. Jest to podpakiet Go's internet pakiet.

Aby utworzyć żądanie HTTP w Go, możesz użyć http. NoweŻądanie() funkcję i ustaw odpowiednią metodę, adres URL, nagłówki i treść żądania. Po utworzeniu żądania możesz użyć narzędzia Go sieć/http paczek http. Klient{} strukturę, aby go uruchomić i otrzymać odpowiedź.

Poniższe przykłady kodu używają wymaga.w, publicznie dostępny interfejs API do testowania żądań HTTP. Możesz go używać do testowania żądań GET, POST, PUT i DELETE w swoich programach Go.

Żądanie POST

Poniższy kod to funkcja, która wysyła żądanie POST do /api/users punkt końcowy reqres.in, aby utworzyć nowego użytkownika z nazwą i zadaniem.

pakiet główny

import (
„bajty”
„kodowanie/json”
"fmt"
"io"
„sieć/http”
)

funkcjaStwórz użytkownika(imię, zawód strunowy) {
fmt. println("Tworzę użytkownika...")

apiUrl := " https://reqres.in/api/users"
dane użytkownika := []bajt(`{"nazwa":"` + imię + `","zadanie":"` + praca + `"}`)

// utwórz nowe żądanie http
prośba, błąd := http. NoweŻądanie("POST", apiUrl, bajty. NewBuffer (dane użytkownika))
wniosek. Nagłówek. Ustawić("Typ zawartości", "aplikacja/json; zestaw znaków=utf-8")

// wyślij żądanie
klient := &http. Klient{}
odpowiedź, błąd:= klient. Zrób (prośba)

Jeśli błąd != zero {
fmt. Println (błąd)
}

ResponseBody, błąd:= io. Czytaj wszystko (odpowiedź. Ciało)

Jeśli błąd != zero {
fmt. Println (błąd)
}

formattedData := format JSON(odpowiedźBody)
fmt. println("Stan: ", odpowiedź. Status)
fmt. println("Treść odpowiedzi: ", sformatowane dane)

// wyczyść pamięć po wykonaniu
odraczać odpowiedź. Ciało. Zamknąć()
}

formatuj JSON to niestandardowa funkcja, którą można napisać, aby sformatować dane wyjściowe. Oto jak możesz to zaimplementować:

// funkcja do formatowania danych JSON
funkcjaformatuj JSON(dane []bajt)strunowy {
rozm bajty wyjściowe. Bufor
błąd:= json. Wcięcie(&wyjście, dane, "", " ")

Jeśli błąd!= zero {
fmt. Println (błąd)
}

d := nie. Bajty()
powrótstrunowy(D)
}

Możesz zadzwonić do Stwórz użytkownika() funkcja w takim programie:

funkcjagłówny() {
fmt. println(„Wykonywanie żądania POST…”)
Stwórz użytkownika(„Tim Omolana”, "Pisarz")
}

Kiedy uruchamiasz program w terminalu, używając iść biegać polecenie, zobaczysz takie dane wyjściowe:

POBIERZ Żądanie

Poniższy kod to funkcja, która wysyła żądanie GET w celu pobrania użytkownika z serwera reqres.in przy użyciu jego unikalnego identyfikatora.

// main.go
funkcjagetUser(ID strunowy) {
fmt. println(„Pobieranie użytkownika według identyfikatora…”)

// wyślij żądanie GET do API, aby uzyskać użytkownika według identyfikatora
apiUrl := " https://reqres.in/api/users/" + identyfikator
prośba, błąd := http. NoweŻądanie("DOSTAWAĆ", apiUrl, zero)

Jeśli błąd != zero {
fmt. Println (błąd)
}

wniosek. Nagłówek. Ustawić("Typ zawartości", "aplikacja/json; zestaw znaków=utf-8")

klient := &http. Klient{}
odpowiedź, błąd:= klient. Zrób (prośba)

Jeśli błąd != zero {
fmt. Println (błąd)
}

ResponseBody, błąd:= io. Czytaj wszystko (odpowiedź. Ciało)

Jeśli błąd != zero {
fmt. Println (błąd)
}

formattedData := format JSON(odpowiedźBody)
fmt. println("Stan: ", odpowiedź. Status)
fmt. println("Treść odpowiedzi: ", sformatowane dane)

// wyczyść pamięć po wykonaniu
odraczać odpowiedź. Ciało. Zamknąć()
}

Żądanie GET nie wysyła danych do serwera, więc po wykonaniu nie akceptuje ani nie wysyła treści żądania do serwera. Oto jak będzie wyglądać przykładowe wywołanie powyższej funkcji:

funkcjagłówny() {
fmt. println(„Wykonywanie żądania GET…”)
getUżytkownik("2")
}

Wyjście:

Żądanie PUT

Żądanie PUT jest bardzo podobne do żądania POST, ponieważ również wysyła dane do serwera. Główna różnica polega na tym, że POST tworzy nowy zasób, podczas gdy PUT aktualizuje istniejący.

Oto implementacja żądania PUT:

// main.go
funkcjaaktualizacjaUżytkownika(imię i nazwisko, zawód, ew strunowy) {
fmt. println("Aktualizowanie użytkownika...")

// wyślij żądanie PUT do API, aby zaktualizować użytkownika
apiUrl := " https://reqres.in/api/users/" + identyfikator
dane użytkownika := []bajt(`{"nazwa":"` + imię + `","zadanie":"` + praca + `"}`)

// utwórz nowe żądanie http PUT
prośba, błąd := http. NoweŻądanie("UMIEŚCIĆ", apiUrl, bajty. NewBuffer (dane użytkownika))
wniosek. Nagłówek. Ustawić("Typ zawartości", "aplikacja/json; zestaw znaków=utf-8")

// Pozostała treść funkcji z funkcji createUser...
// Złóż wniosek, uzyskaj odpowiedź i wyczyść pamięć...
}

Z tego kodu widać, że jedynymi różnicami między powyższym żądaniem PUT a żądaniem POST są nazwa metody i adres URL. Używając PUT do aktualizacji istniejących danych, musisz dołączyć identyfikator do adresu URL żądania. Przykładowe wywołanie tej funkcji wyglądałoby tak:

func main() {
// zaktualizuj wpis o ID 2.
aktualizujużytkownika(„Nowe imię Tima”, "Pisarz personelu", "2")
}

Powyższy kod aktualizuje użytkownika i generuje następujące dane wyjściowe:

USUŃ Żądanie

Użyj metody żądania DELETE, aby wykonać operację usuwania na serwerze WWW. Żądanie usunięcia usuwa zasób identyfikowany przez identyfikator URI. Żądanie DELETE w Go wygląda tak:

funkcjaUsuń użytkownika(ID strunowy) {
fmt. println("Usuwanie użytkownika...")
// wyślij żądanie DELETE do API, aby usunąć użytkownika
apiUrl := " https://reqres.in/api/users/" + identyfikator

// utwórz nowe żądanie http
prośba, błąd := http. NoweŻądanie("USUWAĆ", apiUrl, zero)
wniosek. Nagłówek. Ustawić("Typ zawartości", "aplikacja/json; zestaw znaków=utf-8")

klient := &http. Klient{}
odpowiedź, błąd:= klient. Zrób (prośba)
Jeśli błąd != zero {
fmt. Println (błąd)
}

fmt. println("Stan: ", odpowiedź. Status)
}

Żądanie DELETE nie akceptuje ani nie zwraca treści, dlatego nie ma potrzeby analizowania ani formatowania treści żądania i odpowiedzi JSON. Odpowiedź zwraca tylko status wskazujący sukces lub niepowodzenie. Oto jak wygląda przykładowe wywołanie funkcji wraz z wynikiem:

funkcjagłówny() {
fmt. println(„Wykonywanie żądania USUŃ…”)
Usuń użytkownika("2")
}

Wyjście:

Oszczędzaj czas, korzystając z http. Post() I http. Dostawać() metody z sieć/http opakowanie do zrobienia POST I DOSTAWAĆ żądania bezpośrednio, bez konieczności korzystania z NoweŻądanie() funkcja i Klient{} strukturę, aby utworzyć i złożyć żądanie oddzielnie. Sprawdź dokumentacja net/http po więcej informacji.

Wykonywanie żądań HTTP w aplikacjach Go

The http pakiet w Go zapewnia wszystko, co potrzebne do wysyłania żądań HTTP i obsługi odpowiedzi w aplikacjach Go. Funkcje i struktury dostarczane przez pakiet umożliwiają tworzenie i wysyłanie różnego rodzaju żądań, takich jak GET, POST, PUT, DELETE i wiele innych.

Ułatwia to tworzenie aplikacji internetowych w Go, które mogą wchodzić w interakcje z innymi usługami internetowymi i interfejsami API. Dobry sposób na zdobycie bardziej zaznajomionym z wysyłaniem żądań HTTP w Go jest budowanie aplikacji, która wysyła żądania do innego interfejsu API REST twój.