Odoslanie požiadavky HTTP je kľúčové pre každú aplikáciu, ktorá potrebuje komunikovať cez internet. Zistite, ako odosielať rôzne požiadavky HTTP pomocou Go.

Jedným zo základných princípov, ktorými sa riadi fungovanie World Wide Web, je výmena žiadostí a odpovedí. Keď odošlete požiadavku na prístup na webovú stránku, server odpovie príslušnými údajmi.

Medzi obľúbené protokoly, ktoré riadia rôzne typy internetovej komunikácie, patria HTTP (Hypertext Transfer Protocol), FTP (Protokol prenosu súborov) a SMTP (Simple Mail Transfer Protocol).

HTTP je protokol, ktorý zvyčajne používate, keď si prezeráte webovú stránku alebo používate webovú aplikáciu. Môžete tiež pracovať s požiadavkami HTTP z mnohých programovacích jazykov vrátane Go.

Čo je to požiadavka HTTP?

HTTP definuje, ako klienti, ako napríklad webové prehliadače, odosielajú požiadavky na servery, ktoré potom vracajú odpoveď. Požiadavka HTTP obsahuje informácie o zdroji, ku ktorému sa klient pokúša získať prístup. Správa s požiadavkou zvyčajne obsahuje adresu URL, ktorá identifikuje zdroj a ďalšie voliteľné údaje, ako sú hlavičky a parametre dopytu.

instagram viewer

Existujú niekoľko typov HTTP požiadaviekvrátane GET, POST, PUT, DELETE, HEAD, OPTIONS a CONNECT. Prvé štyri typy metód sú najbežnejšie; odzrkadľujú operácie CRUD na čítanie, vytváranie, aktualizáciu a mazanie.

Typ požiadavky PUT sa často používa zameniteľne s typom požiadavky PATCH. Dosahujú rovnaký účel, líšia sa len v údajoch, ktoré očakávajú, že žiadosť bude obsahovať.

Odosielanie požiadaviek pomocou bežných metód HTTP

Go je vstavaný http balík poskytuje súbor funkcií a štruktúr, ktoré môžete použiť na vytváranie webových serverov a správu požiadaviek HTTP. Je to veľmi robustný balík a všetky webové rámce Go sa na ňom stavajú jedným alebo druhým spôsobom. Je to čiastkový balík Go's net balík.

Na vytvorenie požiadavky HTTP v Go môžete použiť http. NewRequest() a nastavte vhodnú metódu, URL, hlavičky a telo požiadavky. Po vytvorení žiadosti môžete použiť Go net/http balíkov http. Zákazník{} štruktúru na spustenie a prijatie odpovede.

Nasledujúce ukážky kódu používajú reqres.in, verejne dostupné API na testovanie požiadaviek HTTP. Môžete ho použiť na testovanie požiadaviek GET, POST, PUT a DELETE vo vašich programoch Go.

Požiadavka POST

Nižšie uvedený kód je funkcia, ktorá odosiela požiadavku POST na /api/users koncový bod reqres.in na vytvorenie nového používateľa s menom a úlohou.

balík Hlavná

importovať (
"bajty"
"kódovanie/json"
"fmt"
"io"
"net/http"
)

funccreateUser(meno, zamestnanie reťazec) {
fmt. Println("Vytvára sa používateľ...")

apiUrl := " https://reqres.in/api/users"
userData := []byte(`{"meno":"` + meno + ","zamestnanie":"". + práca + `"}`)

// vytvorte novú požiadavku http
požiadavka, chyba := http. NewRequest("POST", apiUrl, bajtov. NewBuffer (userData))
žiadosť. Hlavička. Set("Druh obsahu", "application/json; charset=utf-8")

// odošlite požiadavku
klient := &http. Zákazník{}
odpoveď, chyba := klient. Urobiť (požiadať)

ak chyba!= nula {
fmt. Println (chyba)
}

responseBody, error := io. ReadAll (odpoveď. telo)

ak chyba!= nula {
fmt. Println (chyba)
}

formattedData := formatJSON(responseBody)
fmt. Println("Postavenie: ", odpoveď. Postavenie)
fmt. Println("Telo odpovede: ", formattedData)

// vyčistenie pamäte po vykonaní
odložiť odpoveď. Telo. Zavrieť()
}

formatJSON je vlastná funkcia, ktorú môžete napísať na formátovanie výstupných údajov. Môžete to implementovať takto:

// funkcia na formátovanie údajov JSON
funcformatJSON(údaje []byte)reťazec {
var out bajtov. Buffer
chyba := json. Odsadenie(&out, údaje, "", " ")

ak chyba!= nula {
fmt. Println (chyba)
}

d := von. Bajty()
vrátiťreťazec(d)
}

Môžete zavolať na createUser() fungovať v programe ako je tento:

funcHlavná() {
fmt. Println("Vytváram požiadavku POST...")
createUser("Tim Omolana", "spisovateľ")
}

Keď spustíte program v termináli, pomocou ísť behať príkaz, uvidíte výstup takto:

Žiadosť GET

Nasledujúci kód je funkcia, ktorá odošle požiadavku GET na získanie používateľa zo servera reqres.in pomocou jeho jedinečného ID.

// main.go
funcgetUser(id reťazec) {
fmt. Println("Získanie používateľa podľa ID...")

// vytvorí požiadavku GET na API na získanie používateľa podľa ID
apiUrl := " https://reqres.in/api/users/" + id
požiadavka, chyba := http. NewRequest("ZÍSKAŤ", apiUrl, nula)

ak chyba!= nula {
fmt. Println (chyba)
}

žiadosť. Hlavička. Set("Druh obsahu", "application/json; charset=utf-8")

klient := &http. Zákazník{}
odpoveď, chyba := klient. Urobiť (požiadať)

ak chyba!= nula {
fmt. Println (chyba)
}

responseBody, error := io. ReadAll (odpoveď. telo)

ak chyba!= nula {
fmt. Println (chyba)
}

formattedData := formatJSON(responseBody)
fmt. Println("Postavenie: ", odpoveď. Postavenie)
fmt. Println("Telo odpovede: ", formattedData)

// vyčistenie pamäte po vykonaní
odložiť odpoveď. Telo. Zavrieť()
}

Požiadavka GET neposiela údaje na server, takže po vykonaní neprijme ani nepošle telo požiadavky na server. Takto bude vyzerať príklad volania funkcie vyššie:

funcHlavná() {
fmt. Println("Vytváram požiadavku GET...")
getUser("2")
}

Výkon:

Požiadavka PUT

Požiadavka PUT je veľmi podobná požiadavke POST, pretože tiež odosiela údaje na server. Hlavný rozdiel je v tom, že POST vytvára nový zdroj, zatiaľ čo PUT aktualizuje existujúci.

Tu je implementácia požiadavky PUT:

// main.go
funcaktualizovať používateľa(meno, zamestnanie, id reťazec) {
fmt. Println("Aktualizuje sa používateľ...")

// požiada PUT do API na aktualizáciu používateľa
apiUrl := " https://reqres.in/api/users/" + id
userData := []byte(`{"meno":"` + meno + ","zamestnanie":"". + práca + `"}`)

// vytvorenie novej http požiadavky PUT
požiadavka, chyba := http. NewRequest("PUT", apiUrl, bajtov. NewBuffer (userData))
žiadosť. Hlavička. Set("Druh obsahu", "application/json; charset=utf-8")

// Zostávajúce telo funkcie z funkcie createUser...
// Vytvorte požiadavku, získajte odpoveď a vymažte pamäť...
}

Z tohto kódu môžete vidieť jediné rozdiely medzi požiadavkou PUT a požiadavkou POST vyššie sú názov metódy a adresa URL. Keď používate PUT na aktualizáciu existujúcich údajov, budete musieť pripojiť ID k adrese URL požiadavky. Vzorové volanie tejto funkcie by vyzeralo takto:

func main() {
// aktualizujte záznam s ID 2.
updateUser("Tim Newname", "Štábny spisovateľ", "2")
}

Vyššie uvedený kód aktualizuje používateľa a vytvára nasledujúci výstup:

Žiadosť VYMAZAŤ

Na vykonanie operácie vymazania na webovom serveri použite metódu požiadavky DELETE. Požiadavka na vymazanie vymaže zdroj identifikovaný pomocou URI. Požiadavka DELETE v Go vyzerá takto:

funcdeleteUser(id reťazec) {
fmt. Println("Odstraňuje sa používateľ...")
// vytvorí požiadavku DELETE na API na odstránenie používateľa
apiUrl := " https://reqres.in/api/users/" + id

// vytvorte novú požiadavku http
požiadavka, chyba := http. NewRequest("DELETE", apiUrl, nula)
žiadosť. Hlavička. Set("Druh obsahu", "application/json; charset=utf-8")

klient := &http. Zákazník{}
odpoveď, chyba := klient. Urobiť (požiadať)
ak chyba!= nula {
fmt. Println (chyba)
}

fmt. Println("Postavenie: ", odpoveď. Postavenie)
}

Požiadavka DELETE neprijíma ani nevracia telo, preto nie je potrebné analyzovať ani formátovať telo požiadavky a odpovede JSON. Odpoveď vráti iba stav označujúci úspech alebo zlyhanie. Takto vyzerá vzorové volanie funkcie s jej výstupom:

funcHlavná() {
fmt. Println("Vytvára sa žiadosť o DELETE...")
deleteUser("2")
}

Výkon:

Ušetrite čas pomocou http. príspevok() a http. Získať () metódy z net/http balíček vyrobiť POST a GET žiadosti priamo, bez toho, aby ste museli použiť NewRequest() funkcia a Zákazník{} vytvoriť a podať žiadosť samostatne. Pozrite sa na net/http dokumentácia Pre viac informácií.

Vytváranie požiadaviek HTTP v aplikáciách Go

The http balík v Go poskytuje všetko potrebné na vytváranie požiadaviek HTTP a spracovanie odpovedí v aplikáciách Go. Funkcie a štruktúry poskytované balíkom vám umožňujú vytvárať a odosielať rôzne druhy požiadaviek, ako sú GET, POST, PUT, DELETE a mnohé ďalšie.

To uľahčuje vytváranie webových aplikácií v Go, ktoré môžu interagovať s inými webovými službami a rozhraniami API. Dobrý spôsob, ako sa dostať oboznámenejšie s vytváraním požiadaviek HTTP v Go je vytvorenie aplikácie, ktorá odosiela požiadavky na iné REST API tvoj.