HTTP-pyynnön lähettäminen on keskeistä kaikille sovelluksille, jotka tarvitsevat yhteyden Internetiin. Opi lähettämään erilaisia ​​HTTP-pyyntöjä Golla.

Yksi World Wide Webin toimintaa ohjaavista perusperiaatteista on pyyntöjen ja vastausten vaihto. Kun lähetät pyynnön päästä verkkosivulle, palvelin vastaa asiaankuuluvilla tiedoilla.

Suosittuja protokollia, jotka hallitsevat erityyppistä Internet-viestintää, ovat mm HTTP (Hypertext Transfer Protocol), FTP (Tiedostonsiirtoprotokolla) ja SMTP (Simple Mail Transfer Protocol).

HTTP on protokolla, jota yleensä käytät, kun tarkastelet verkkosivustoa tai käytät verkkosovellusta. Voit myös käsitellä HTTP-pyyntöjä useilta ohjelmointikieliltä, ​​mukaan lukien Go.

Mikä on HTTP-pyyntö?

HTTP määrittää, kuinka asiakkaat, kuten verkkoselaimet, lähettävät pyyntöjä palvelimille, jotka sitten palauttavat vastauksen. HTTP-pyyntö sisältää tietoja resurssista, jota asiakas yrittää käyttää. Pyyntösanoma sisältää tyypillisesti URL-osoitteen, joka identifioi resurssin, ja muita valinnaisia ​​tietoja, kuten otsikoita ja kyselyparametreja.

instagram viewer

On useita HTTP-pyyntötyyppejä, mukaan lukien GET, POST, PUT, DELETE, HEAD, OPTIONS ja CONNECT. Ensimmäiset neljä menetelmätyyppiä ovat yleisimpiä; ne heijastavat CRUD-toimintoja, jotka lukevat, luovat, päivittävät ja poistavat vastaavasti.

PUT-pyyntötyyppiä käytetään usein vaihtokelpoisesti PATCH-pyyntötyypin kanssa. Niillä saavutetaan sama tarkoitus, ne eroavat vain tiedoista, joita he odottavat pyynnön sisältävän.

Pyyntöjen lähettäminen yleisillä HTTP-menetelmillä

Go on sisäänrakennettu http paketti tarjoaa joukon toimintoja ja rakenteita, joiden avulla voit luoda verkkopalvelimia ja hallita HTTP-pyyntöjä. Se on erittäin vankka paketti, ja kaikki Go-verkkokehykset rakentuvat sen päälle tavalla tai toisella. Se on Go: n alapaketti netto paketti.

Voit luoda HTTP-pyynnön Gossa käyttämällä http. NewRequest() funktio ja aseta sopiva menetelmä, URL-osoite, otsikot ja pyynnön runko. Kun olet luonut pyynnön, voit käyttää Go net/http paketin http. Asiakas{} rakennetta sen suorittamiseksi ja vastauksen vastaanottamiseksi.

Seuraavat koodiesimerkit käyttävät reqres.in, julkisesti saatavilla oleva API HTTP-pyyntöjen testaamiseen. Voit käyttää sitä GET-, POST-, PUT- ja DELETE-pyyntöjen testaamiseen Go-ohjelmissasi.

POST-pyyntö

Alla oleva koodi on toiminto, joka lähettää POST-pyynnön /api/users reqres.in-päätepiste luodaksesi uuden käyttäjän, jolla on nimi ja työ.

paketti pää

tuonti (
"tavua"
"koodaus/json"
"fmt"
"io"
"net/http"
)

funcluo käyttäjä(nimi, työpaikka merkkijono) {
fmt. Println("Luodaan käyttäjää...")

apiUrl := " https://reqres.in/api/users"
käyttäjätiedot := []tavu(`{"nimi":"` + nimi + `","työ":"` + työpaikka + `"}`)

// luo uusi http-pyyntö
pyyntö, virhe := http. NewRequest("LÄHETTÄÄ", apiUrl, tavua. NewBuffer (käyttäjätiedot))
pyyntö. Otsikko. Aseta("Sisältötyyppi", "sovellus/json; charset=utf-8")

// lähetä pyyntö
asiakas := &http. Asiakas{}
vastaus, virhe := asiakas. Tee (pyydä)

jos virhe! = nolla {
fmt. Println (virhe)
}

responseBody, error := io. Lue kaikki (vastaus. runko)

jos virhe! = nolla {
fmt. Println (virhe)
}

formattedData := formatJSON(responseBody)
fmt. Println("Tila: ", vastaus. Tila)
fmt. Println("Vastausteksti:", muotoiltu data)

// puhdistaa muisti suorituksen jälkeen
lykätä vastaus. Runko. Kiinni()
}

muotoJSON on mukautettu funktio, jonka avulla voit muotoilla lähtötiedot. Näin voit toteuttaa sen:

//-funktio JSON-tietojen alustamiseksi
funcmuotoJSON(tiedot []tavu)merkkijono {
var ulos tavuja. Puskuri
virhe := json. Sisennys(&out, data, "", " ")

jos virhe! = nolla {
fmt. Println (err)
}

d := ulos. Tavua()
palatamerkkijono(d)
}

Voit soittaa luo käyttäjä() toimii tällaisessa ohjelmassa:

funcpää() {
fmt. Println("Tehdään POST-pyyntö...")
luo käyttäjä("Tim Omolana", "Kirjailija")
}

Kun suoritat ohjelman päätteessä, käytä mene juoksemaan -komento, näet seuraavanlaisen lähdön:

HAE Pyyntö

Seuraava koodi on toiminto, joka lähettää GET-pyynnön käyttäjän hakemiseksi reqres.in-palvelimelta käyttämällä hänen yksilöllistä tunnusta.

// main.go
funcgetUser(id merkkijono) {
fmt. Println("Haetaan käyttäjää tunnuksella...")

// tee GET-pyyntö API: lle saadaksesi käyttäjän tunnuksella
apiUrl := " https://reqres.in/api/users/" + id
pyyntö, virhe := http. NewRequest("SAADA", apiUrl, nolla)

jos virhe! = nolla {
fmt. Println (virhe)
}

pyyntö. Otsikko. Aseta("Sisältötyyppi", "sovellus/json; charset=utf-8")

asiakas := &http. Asiakas{}
vastaus, virhe := asiakas. Tee (pyydä)

jos virhe! = nolla {
fmt. Println (virhe)
}

responseBody, error := io. Lue kaikki (vastaus. runko)

jos virhe! = nolla {
fmt. Println (virhe)
}

formattedData := formatJSON(responseBody)
fmt. Println("Tila: ", vastaus. Tila)
fmt. Println("Vastausteksti:", muotoiltu data)

// puhdistaa muisti suorituksen jälkeen
lykätä vastaus. Runko. Kiinni()
}

GET-pyyntö ei lähetä tietoja palvelimelle, joten se ei hyväksy tai lähetä pyynnön runkoa palvelimelle tehtäessä. Tältä näyttää esimerkkikutsu yllä olevaan funktioon:

funcpää() {
fmt. Println("Tee GET-pyyntöä...")
getUser("2")
}

Lähtö:

PUT-pyyntö

PUT-pyyntö on hyvin samanlainen kuin POST-pyyntö, koska se lähettää myös tietoja palvelimelle. Suurin ero on, että POST luo uuden resurssin, kun taas PUT päivittää olemassa olevan.

Tässä on PUT-pyynnön toteutus:

// main.go
funcpäivitäKäyttäjä(nimi, työpaikka, tunnus merkkijono) {
fmt. Println("Päivitetään käyttäjää...")

// tee PUT-pyyntö API: lle päivittääksesi käyttäjän
apiUrl := " https://reqres.in/api/users/" + id
käyttäjätiedot := []tavu(`{"nimi":"` + nimi + `","työ":"` + työpaikka + `"}`)

// luo uusi http PUT -pyyntö
pyyntö, virhe := http. NewRequest("LAITTAA", apiUrl, tavua. NewBuffer (käyttäjätiedot))
pyyntö. Otsikko. Aseta("Sisältötyyppi", "sovellus/json; charset=utf-8")

// Jäljellä oleva funktion runko CreateUser-funktiosta...
// Tee pyyntö, vastaanota vastaus ja tyhjennä muisti...
}

Tästä koodista näet, että ainoat erot yllä olevan PUT-pyynnön ja POST-pyynnön välillä ovat menetelmän nimi ja URL-osoite. Kun käytät PUT: ta olemassa olevien tietojen päivittämiseen, sinun on liitettävä tunnus pyynnön URL-osoitteeseen. Esimerkkikutsu tälle funktiolle näyttäisi tältä:

func main() {
// päivitä merkintä tunnuksella 2.
updateUser("Tim Newname", "Henkilökunnan kirjoittaja", "2")
}

Yllä oleva koodi päivittää käyttäjän ja tuottaa seuraavan tulosteen:

POISTA pyyntö

Käytä DELETE-pyyntömenetelmää poistaaksesi verkkopalvelimen. Poistopyyntö poistaa URI: n tunnistaman resurssin. POISTA-pyyntö Goissa näyttää tältä:

funcpoistaKäyttäjä(id merkkijono) {
fmt. Println("Poistetaan käyttäjää...")
// tee DELETE-pyyntö API: lle käyttäjän poistamiseksi
apiUrl := " https://reqres.in/api/users/" + id

// luo uusi http-pyyntö
pyyntö, virhe := http. NewRequest("POISTAA", apiUrl, nolla)
pyyntö. Otsikko. Aseta("Sisältötyyppi", "sovellus/json; charset=utf-8")

asiakas := &http. Asiakas{}
vastaus, virhe := asiakas. Tee (pyydä)
jos virhe! = nolla {
fmt. Println (virhe)
}

fmt. Println("Tila: ", vastaus. Tila)
}

DELETE-pyyntö ei hyväksy eikä palauta runkoa, joten JSON-pyyntö- ja vastausrunkoa ei tarvitse jäsentää tai muotoilla. Vastaus palauttaa vain tilan, joka osoittaa onnistumisen tai epäonnistumisen. Tältä näyttää esimerkkikutsu funktiolle tulostensa kanssa:

funcpää() {
fmt. Println("Tehdään POISTA-pyyntöä...")
deleteUser("2")
}

Lähtö:

Säästä aikaa käyttämällä http. Lähettää() ja http. Saada() menetelmät net/http tehdä paketti LÄHETTÄÄ ja SAADA pyytää suoraan ilman, että sinun tarvitsee käyttää NewRequest() toiminto ja Asiakas{} rakenne luoda ja tehdä pyyntö erikseen. Tutustu net/http-dokumentaatio Lisätietoja.

HTTP-pyyntöjen tekeminen Go-sovelluksissa

The http paketti Go tarjoaa kaiken tarvittavan HTTP-pyyntöjen tekemiseen ja vastausten käsittelemiseen Go-sovelluksissa. Paketin tarjoamien toimintojen ja rakenteiden avulla voit luoda ja lähettää erilaisia ​​pyyntöjä, kuten GET, POST, PUT, DELETE ja monia muita.

Tämän ansiosta Gossa on helppo rakentaa verkkosovelluksia, jotka voivat olla vuorovaikutuksessa muiden verkkopalvelujen ja sovellusliittymien kanssa. Hyvä tapa saada HTTP-pyyntöjen tekeminen Gossa on tutumpi rakentamalla sovellus, joka tekee pyyntöjä toiselle REST API: lle sinun.