Изпращането на HTTP заявка е ключово за всяко приложение, което трябва да комуникира през интернет. Разберете как да изпращате различни HTTP заявки с помощта на Go.

Един от основните принципи, които управляват функционирането на световната мрежа, е обменът на заявки и отговори. Когато изпратите заявка за достъп до уеб страница, сървърът отговаря с подходящи данни.

Популярните протоколи, които управляват различни видове интернет комуникация, включват HTTP (протокол за трансфер на хипертекст), FTP (протокол за прехвърляне на файлове) и SMTP (Прост протокол за прехвърляне на поща).

HTTP е протоколът, който обикновено използвате, когато преглеждате уебсайт или използвате приложение с активиран уеб. Можете също да работите с HTTP заявки от много езици за програмиране, включително Go.

Какво е HTTP заявка?

HTTP дефинира как клиентите, като уеб браузъри, изпращат заявки до сървъри, които след това връщат отговор. HTTP заявка съдържа информация за ресурс, до който клиентът се опитва да получи достъп. Съобщението за заявка обикновено включва URL адрес, който идентифицира ресурса и други незадължителни данни като заглавки и параметри на заявката.

instagram viewer

Има няколко вида HTTP заявки, включително GET, POST, PUT, DELETE, HEAD, OPTIONS и CONNECT. Първите четири вида методи са най-често срещаните; те отразяват съответно операциите CRUD за четене, създаване, актуализиране и изтриване.

Типът заявка PUT често се използва взаимозаменяемо с типа заявка PATCH. Те постигат една и съща цел, просто се различават по данните, които очакват заявката да включва.

Изпращане на заявки с помощта на общи HTTP методи

Go е вграден http пакет предоставя набор от функции и структури, които можете да използвате за създаване на уеб сървъри и управление на HTTP заявки. Това е много стабилен пакет и всички Go уеб рамки се надграждат върху него по един или друг начин. Това е подпакет на Go нето пакет.

За да създадете HTTP заявка в Go, можете да използвате http. NewRequest() функция и задайте подходящия метод, URL, заглавки и тяло на заявката. След като създадете заявката, можете да използвате Go net/http пакети http. клиент{} структура, за да го стартирате и да получите отговора.

Използват се следните примерни кодове reqres.in, публично достъпен API за тестване на HTTP заявки. Можете да го използвате, за да тествате GET, POST, PUT и DELETE заявки във вашите Go програми.

POST заявка

Кодът по-долу е функция, която изпраща POST заявка до /api/users крайна точка на reqres.in за създаване на нов потребител с име и работа.

пакет основен

импортиране (
"байтове"
"кодиране/json"
"fmt"
"йо"
"net/http"
)

функcreateUser(име, работа низ) {
fmt. Println(„Създаване на потребител...“)

apiUrl := " https://reqres.in/api/users"
потребителски данни := []байт(`{"име":"` + име + `","работа":"` + работа + `"}`)

// създаване на нова http заявка
заявка, грешка := http. NewRequest("ПУБЛИКУВАНЕ", apiUrl, байтове. NewBuffer (userData))
искане. Заглавка. Комплект("Тип съдържание", "приложение/json; charset=utf-8")

// изпрати заявката
клиент := &http. клиент{}
отговор, грешка := клиент. направете (заявка)

ако грешка!= нула {
fmt. Println (грешка)
}

responseBody, грешка := io. ReadAll (отговор. тяло)

ако грешка!= нула {
fmt. Println (грешка)
}

formattedData := formatJSON(responseBody)
fmt. Println(„Състояние:“, отговор. състояние)
fmt. Println(„Тяло на отговора:“, formattedData)

// изчистване на паметта след изпълнение
отлагам отговор. Тяло. Близо()
}

formatJSON е персонализирана функция, която можете да напишете, за да форматирате изходните данни. Ето как можете да го приложите:

// функция за форматиране на JSON данни
функformatJSON(данни []байт)низ {
вар извън байтове. Буфер
грешка := json. Отстъп(&вън, данни, "", " ")

ако грешка!= нула {
fmt. Println (грешка)
}

d := вън. байтове()
връщанениз(д)
}

Можете да се обадите на createUser() функция в програма като тази:

функосновен() {
fmt. Println(„Извършва се POST заявка...“)
createUser("Тим Омолана", "писател")
}

Когато стартирате програмата в терминал, използвайки Бягай команда, ще видите резултат като този:

GET Заявка

Следният код е функция, която изпраща GET заявка за извличане на потребител от сървъра reqres.in, използвайки техния уникален идентификатор.

// main.go
функgetUser(документ за самоличност низ) {
fmt. Println(„Получаване на потребител по ID...“)

// направете GET заявка към API, за да получите потребител по ID
apiUrl := " https://reqres.in/api/users/" + id
заявка, грешка := http. NewRequest("ВЗЕМИ", apiUrl, нула)

ако грешка!= нула {
fmt. Println (грешка)
}

искане. Заглавка. Комплект("Тип съдържание", "приложение/json; charset=utf-8")

клиент := &http. клиент{}
отговор, грешка := клиент. направете (заявка)

ако грешка!= нула {
fmt. Println (грешка)
}

responseBody, грешка := io. ReadAll (отговор. тяло)

ако грешка!= нула {
fmt. Println (грешка)
}

formattedData := formatJSON(responseBody)
fmt. Println(„Състояние:“, отговор. състояние)
fmt. Println(„Тяло на отговора:“, formattedData)

// изчистване на паметта след изпълнение
отлагам отговор. Тяло. Близо()
}

Заявката GET не изпраща данни до сървъра, така че не приема или изпраща тяло на заявка до сървъра, когато е направена. Ето как ще изглежда примерно извикване на функцията по-горе:

функосновен() {
fmt. Println(„Правя се GET заявка...“)
getUser("2")
}

Изход:

PUT Заявка

PUT заявката е много подобна на POST заявка, защото също изпраща данни към сървъра. Основната разлика е, че POST създава нов ресурс, докато PUT актуализира съществуващ.

Ето изпълнение на PUT заявка:

// main.go
функupdateUser(име, работа, лична карта низ) {
fmt. Println(„Потребителят се актуализира...“)

// направете PUT заявка към API за актуализиране на потребителя
apiUrl := " https://reqres.in/api/users/" + id
потребителски данни := []байт(`{"име":"` + име + `","работа":"` + работа + `"}`)

// създаване на нова http PUT заявка
заявка, грешка := http. NewRequest("СЛАГАМ", apiUrl, байтове. NewBuffer (userData))
искане. Заглавка. Комплект("Тип съдържание", "приложение/json; charset=utf-8")

// Оставащо тяло на функцията от функцията createUser...
// Направете заявка, получете отговор и изчистете паметта...
}

От този код можете да видите единствените разлики между заявката PUT и заявката POST по-горе са името на метода и URL адреса. Когато използвате PUT за актуализиране на съществуващи данни, ще трябва да добавите идентификатора към URL адреса на заявката. Примерно извикване на тази функция би изглеждало така:

func main() {
// актуализиране на запис с ID 2.
updateUser("Тим Нюнейм", „щатен писател“, "2")
}

Кодът по-горе актуализира потребителя и произвежда следния изход:

ИЗТРИВАНЕ на заявка

Използвайте метода за заявка DELETE, за да извършите операция за изтриване на уеб сървър. Заявката за изтриване изтрива ресурса, идентифициран от URI. Заявката за ИЗТРИВАНЕ в Go изглежда така:

функdeleteUser(документ за самоличност низ) {
fmt. Println(„Изтриване на потребител...“)
// направи DELETE заявка към API за изтриване на потребител
apiUrl := " https://reqres.in/api/users/" + id

// създаване на нова http заявка
заявка, грешка := http. NewRequest("ИЗТРИЙ", apiUrl, нула)
искане. Заглавка. Комплект("Тип съдържание", "приложение/json; charset=utf-8")

клиент := &http. клиент{}
отговор, грешка := клиент. направете (заявка)
ако грешка!= нула {
fmt. Println (грешка)
}

fmt. Println(„Състояние:“, отговор. състояние)
}

Заявка DELETE нито приема, нито връща тяло, поради което не е необходимо да анализирате или форматирате JSON заявката и тялото на отговора. Отговорът връща само статус, който показва успех или неуспех. Ето как изглежда примерно извикване на функцията с нейния изход:

функосновен() {
fmt. Println(„Извършва се заявка за ИЗТРИВАНЕ...“)
deleteUser("2")
}

Изход:

Спестете време, като използвате http. Публикувай() и http. Вземи() методи от net/http пакет за направа ПУБЛИКУВАНЕ и ВЗЕМЕТЕ заявки директно, без да се налага да използвате NewRequest() функция и клиент{} структура за създаване и подаване на заявката отделно. Разгледайте net/http документация за повече информация.

Правене на HTTP заявки в Go приложения

The http пакет в Go предоставя всичко необходимо за правене на HTTP заявки и обработка на отговори в Go приложения. Функциите и структурите, предоставени от пакета, ви позволяват да създавате и изпращате различни видове заявки като GET, POST, PUT, DELETE и много други.

Това улеснява изграждането на уеб приложения в Go, които могат да взаимодействат с други уеб услуги и API. Добър начин да получите по-запознат с правенето на HTTP заявки в Go е чрез изграждане на приложение, което прави заявки към друг REST API на твоя.