HTTP pieprasījuma nosūtīšana ir svarīga jebkurai lietotnei, kurai ir jāsazinās internetā. Uzziniet, kā nosūtīt dažādus HTTP pieprasījumus, izmantojot Go.

Viens no pamatprincipiem, kas nosaka globālā tīmekļa darbību, ir pieprasījumu un atbilžu apmaiņa. Nosūtot pieprasījumu piekļūt tīmekļa lapai, serveris atbild ar atbilstošiem datiem.

Populāri protokoli, kas regulē dažādus interneta saziņas veidus, ietver HTTP (Hiperteksta pārsūtīšanas protokols), FTP (File Transfer Protocol) un SMTP (Vienkāršais pasta pārsūtīšanas protokols).

HTTP ir protokols, ko parasti izmantojat, kad skatāt vietni vai izmantojat tīmeklī iespējotu lietotni. Varat arī strādāt ar HTTP pieprasījumiem no daudzām programmēšanas valodām, tostarp no Go.

Kas ir HTTP pieprasījums?

HTTP nosaka, kā klienti, piemēram, tīmekļa pārlūkprogrammas, sūta pieprasījumus serveriem, kas pēc tam atgriež atbildi. HTTP pieprasījums satur informāciju par resursu, kuram klients mēģina piekļūt. Pieprasījuma ziņojumā parasti ir ietverts URL, kas identificē resursu, un citi neobligāti dati, piemēram, galvenes un vaicājuma parametri.

Tur ir vairāki HTTP pieprasījumu veidi, tostarp IEGŪT, POSTĪT, IELIKT, dzēst, HEAD, OPTIONS un CONNECT. Pirmie četri metožu veidi ir visizplatītākie; tie atspoguļo CRUD operācijas, kas attiecīgi tiek lasītas, izveidotas, atjauninātas un izdzēstas.

Pieprasījuma veids PUT bieži tiek lietots aizvietojami ar PATCH pieprasījuma veidu. Tie sasniedz vienu un to pašu mērķi, tikai atšķiras datos, kas jāiekļauj pieprasījumā.

Pieprasījumu sūtīšana, izmantojot parastās HTTP metodes

Go ir iebūvēts http iepakojums nodrošina funkciju un struktūru kopumu, ko varat izmantot, lai izveidotu tīmekļa serverus un pārvaldītu HTTP pieprasījumus. Tā ir ļoti izturīga pakotne, un visas Go tīmekļa sistēmas vienā vai otrā veidā tiek veidotas uz tās. Tā ir Go's apakšpakete tīkls iepakojums.

Lai programmā Go izveidotu HTTP pieprasījumu, varat izmantot http. NewRequest() funkciju un iestatiet atbilstošo metodi, URL, galvenes un pieprasījuma pamattekstu. Pēc pieprasījuma izveides varat izmantot Go net/http iepakojums http. Klients{} struktūra, lai to palaistu un saņemtu atbildi.

Tiek izmantoti šādi koda paraugi reqres.in, publiski pieejama API HTTP pieprasījumu testēšanai. Varat to izmantot, lai pārbaudītu GET, POST, PUT un DELETE pieprasījumus savās Go programmās.

POST pieprasījums

Tālāk norādītais kods ir funkcija, kas nosūta POST pieprasījumu uz /api/users galapunkts reqres.in, lai izveidotu jaunu lietotāju ar vārdu un darbu.

iepakojums galvenais

imports (
"baiti"
"kodējums/json"
"fmt"
"io"
"net/http"
)

funcizveidotLietotāju(vārds, darbs stīga) {
fmt. Println("Notiek lietotāja izveide...")

apiUrl := " https://reqres.in/api/users"
lietotāja dati := []baits(`{"nosaukums":"` + vārds + `","darbs":"` + darbs + `"}`)

// izveidot jaunu http pieprasījumu
pieprasījums, kļūda := http. NewRequest("POSTĪT", apiUrl, baiti. NewBuffer (lietotāja dati))
pieprasījumu. Virsraksts. Set("Satura veids", "lietojumprogramma/json; charset=utf-8")

// nosūtīt pieprasījumu
klients := &http. Klients{}
atbilde, kļūda := klients. Darīt (pieprasīt)

ja kļūda!= nulle {
fmt. Println (kļūda)
}

responseBody, error := io. Lasīt visu (atbilde. korpuss)

ja kļūda!= nulle {
fmt. Println (kļūda)
}

formattedData := formatJSON(responseBody)
fmt. Println("Statuss:", atbilde. Statuss)
fmt. Println("Atbildes pamatteksts:", formatēti dati)

// iztīrīt atmiņu pēc izpildes
atlikt atbildi. Ķermenis. Aizvērt ()
}

formātsJSON ir pielāgota funkcija, kuru varat rakstīt, lai formatētu izejas datus. Lūk, kā jūs varat to īstenot:

// funkcija JSON datu formatēšanai
funcformātsJSON(dati []baits)stīga {
var baiti. Buferis
kļūda := json. Atkāpe(&out, dati, "", " ")

ja kļūda! = nulle {
fmt. Println (kļūda)
}

d := ārā. Baiti ()
atgrieztiesstīga(d)
}

Jūs varat zvanīt uz CreateUser() funkcija šādā programmā:

funcgalvenais() {
fmt. Println("Notiek POST pieprasījuma veikšana...")
CreateUser("Tims Omolana", "Rakstnieks")
}

Palaižot programmu terminālī, izmantojot ej skriet komandu, jūs redzēsit šādu izvadi:

SAŅEMT Pieprasījumu

Šis kods ir funkcija, kas nosūta GET pieprasījumu, lai izgūtu lietotāju no servera reqres.in, izmantojot viņa unikālo ID.

// main.go
funcgetUser(id stīga) {
fmt. Println("Notiek lietotāja iegūšana pēc ID...")

// veikt GET pieprasījumu API, lai iegūtu lietotāju pēc ID
apiUrl := " https://reqres.in/api/users/" + id
pieprasījums, kļūda := http. NewRequest("GŪT", apiUrl, nulle)

ja kļūda!= nulle {
fmt. Println (kļūda)
}

pieprasījumu. Virsraksts. Set("Satura veids", "lietojumprogramma/json; charset=utf-8")

klients := &http. Klients{}
atbilde, kļūda := klients. Darīt (pieprasīt)

ja kļūda!= nulle {
fmt. Println (kļūda)
}

responseBody, error := io. Lasīt visu (atbilde. korpuss)

ja kļūda!= nulle {
fmt. Println (kļūda)
}

formattedData := formatJSON(responseBody)
fmt. Println("Statuss:", atbilde. Statuss)
fmt. Println("Atbildes pamatteksts:", formatēti dati)

// iztīrīt atmiņu pēc izpildes
atlikt atbildi. Ķermenis. Aizvērt ()
}

GET pieprasījums nesūta datus serverim, tāpēc tas nepieņem vai nenosūta serverim pieprasījuma pamattekstu, kad tas tiek veikts. Lūk, kā izskatīsies iepriekš minētās funkcijas izsaukuma piemērs:

funcgalvenais() {
fmt. Println("Notiek GET pieprasījuma veikšana...")
getUser("2")
}

Izvade:

PUT pieprasījums

PUT pieprasījums ir ļoti līdzīgs POST pieprasījumam, jo ​​tas arī nosūta datus serverim. Galvenā atšķirība ir tā, ka POST izveido jaunu resursu, bet PUT atjaunina esošu.

Tālāk ir norādīta PUT pieprasījuma ieviešana.

// main.go
funcupdateUser(vārds, darbs, id stīga) {
fmt. Println("Notiek lietotāja atjaunināšana...")

// veikt PUT pieprasījumu API, lai atjauninātu lietotāju
apiUrl := " https://reqres.in/api/users/" + id
lietotāja dati := []baits(`{"nosaukums":"` + vārds + `","darbs":"` + darbs + `"}`)

// izveidot jaunu http PUT pieprasījumu
pieprasījums, kļūda := http. NewRequest("PUT", apiUrl, baiti. NewBuffer (lietotāja dati))
pieprasījumu. Virsraksts. Set("Satura veids", "lietojumprogramma/json; charset=utf-8")

// Atlikušais funkcijas pamatteksts no CreateUser funkcijas...
// Iesniedziet pieprasījumu, saņemiet atbildi un notīriet atmiņu...
}

No šī koda jūs varat redzēt, ka vienīgās atšķirības starp PUT pieprasījumu un POST pieprasījumu iepriekš ir metodes nosaukums un URL. Ja izmantojat PUT, lai atjauninātu esošos datus, pieprasījuma URL ir jāpievieno ID. Šīs funkcijas izsaukuma paraugs izskatītos šādi:

func main() {
// atjauniniet ierakstu ar ID 2.
updateUser("Tims Ņūname", "Personāla rakstnieks", "2")
}

Iepriekš minētais kods atjaunina lietotāju un rada šādu izvadi:

DZĒST pieprasījums

Izmantojiet DELETE pieprasījuma metodi, lai veiktu dzēšanas darbību tīmekļa serverī. Dzēšanas pieprasījums dzēš URI identificēto resursu. DELETE pieprasījums pakalpojumā Go izskatās šādi:

funcdzēst lietotāju(id stīga) {
fmt. Println("Notiek lietotāja dzēšana...")
// veiciet DELETE pieprasījumu API, lai dzēstu lietotāju
apiUrl := " https://reqres.in/api/users/" + id

// izveidot jaunu http pieprasījumu
pieprasījums, kļūda := http. NewRequest("DZĒST", apiUrl, nulle)
pieprasījumu. Virsraksts. Set("Satura veids", "lietojumprogramma/json; charset=utf-8")

klients := &http. Klients{}
atbilde, kļūda := klients. Darīt (pieprasīt)
ja kļūda!= nulle {
fmt. Println (kļūda)
}

fmt. Println("Statuss:", atbilde. Statuss)
}

DELETE pieprasījums nedz pieņem, nedz neatgriež pamattekstu, tāpēc nav nepieciešams parsēt vai formatēt JSON pieprasījuma un atbildes pamattekstu. Atbilde atgriež tikai statusu, kas norāda uz panākumiem vai neveiksmēm. Lūk, kā izskatās funkcijas izsaukšanas paraugs ar izvadi:

funcgalvenais() {
fmt. Println("Notiek DELETE pieprasījuma veikšana...")
deleteUser("2")
}

Izvade:

Ietaupiet laiku, izmantojot http. Post () un http. Gūt() metodes no net/http iepakojums, ko izgatavot POSTĪT un GŪT pieprasījumus tieši, neizmantojot NewRequest() funkcija un Klients{} struktūra, lai izveidotu un veiktu pieprasījumu atsevišķi. Apskatiet net/http dokumentācija lai iegūtu vairāk informācijas.

HTTP pieprasījumu veikšana Go lietojumprogrammās

The http pakotne Go nodrošina visu nepieciešamo, lai veiktu HTTP pieprasījumus un apstrādātu atbildes Go lietojumprogrammās. Pakotnes nodrošinātās funkcijas un struktūras ļauj izveidot un nosūtīt dažāda veida pieprasījumus, piemēram, GET, POST, PUT, DELETE un daudz ko citu.

Tas atvieglo Go tīmekļa lietojumprogrammu izveidi, kas var mijiedarboties ar citiem tīmekļa pakalpojumiem un API. Labs veids, kā iegūt Vairāk pārzināt HTTP pieprasījumu veikšanu programmā Go ir izveidot lietojumprogrammu, kas veic pieprasījumus citai REST API jūsu.