Слање ХТТП захтева је кључно за сваку апликацију која треба да комуницира преко интернета. Сазнајте како да пошаљете различите ХТТП захтеве користећи Го.
Један од основних принципа који управљају функционисањем Ворлд Виде Веб-а је размена захтева и одговора. Када пошаљете захтев за приступ веб страници, сервер одговара одговарајућим подацима.
Популарни протоколи који регулишу различите врсте интернет комуникације укључују ХТТП (Протокол за пренос хипертекста), ФТП (Протокол за пренос датотека), и СМТП (Симпле Маил Трансфер Протоцол).
ХТТП је протокол који ћете обично користити када гледате веб локацију или користите апликацију за веб. Такође можете да радите са ХТТП захтевима из многих програмских језика, укључујући Го.
Шта је ХТТП захтев?
ХТТП дефинише како клијенти, попут веб претраживача, шаљу захтеве серверима који затим враћају одговор. ХТТП захтев садржи информације о ресурсу којем клијент покушава да приступи. Порука захтева обично садржи УРЛ који идентификује ресурс и друге опционе податке као што су заглавља и параметри упита.
Постоје неколико типова ХТТП захтева, укључујући ГЕТ, ПОСТ, ПУТ, ДЕЛЕТЕ, ХЕАД, ОПТИОНС и ЦОННЕЦТ. Прва четири типа метода су најчешћа; они одражавају ЦРУД операције читања, креирања, ажурирања и брисања.
Тип ПУТ захтева се често користи наизменично са типом захтева ПАТЦХ. Они постижу исту сврху, само се разликују у подацима које очекују да ће захтев укључити.
Слање захтева коришћењем уобичајених ХТТП метода
Го је уграђен хттп пакет пружа скуп функција и структура које можете користити за креирање веб сервера и управљање ХТТП захтевима. То је веома робустан пакет и сви Го веб оквири се надограђују на њега на један или други начин. То је потпакет Го-а нет пакет.
Да бисте креирали ХТТП захтев у Го, можете користити хттп. НевРекуест() функцију и подесите одговарајући метод, УРЛ, заглавља и тело захтева. Након креирања захтева, можете користити Го нет/хттп пакета хттп. клијент{} структуру да га покрене и добије одговор.
Следећи примери кода користе рекрес.ин, јавно доступан АПИ за тестирање ХТТП захтева. Можете га користити за тестирање ГЕТ, ПОСТ, ПУТ и ДЕЛЕТЕ захтева у вашим Го програмима.
ПОСТ Рекуест
Код испод је функција која шаље ПОСТ захтев на /api/users крајња тачка рекрес.ин да креирате новог корисника са именом и послом.
пакет главни
увоз (
"бајтови"
"кодирање/јсон"
"фмт"
"ио"
"нет/хттп"
)фунцнаправи корисника(име, посао низ) {
фмт. Принтлн(„Креирање корисника...“)апиУрл := " https://reqres.in/api/users"
кориснички подаци := []бајт(`{"наме":"` + име + `","посао":"` + посао + `"}`)// креирање новог хттп захтева
захтев, грешка := хттп. НевРекуест("ПОШТА", апиУрл, бајтови. НевБуффер (усерДата))
захтев. Хеадер. Комплет("Тип садржаја", „апплицатион/јсон; цхарсет=утф-8")// послати захтев
клијент := &хттп. клијент{}
одговор, грешка := клијент. Уради (захтев)ако грешка != нула {
фмт. Принтлн (грешка)
}респонсеБоди, грешка := ио. Прочитај све (одговор. тело)
ако грешка != нула {
фмт. Принтлн (грешка)
}форматтедДата := форматЈСОН(респонсеБоди)
фмт. Принтлн("Статус: ", одговор. статус)
фмт. Принтлн("Тело одговора: ", форматтедДата)
// очисти меморију након извршења
одложити одговор. Тело. Близу()
}
форматЈСОН је прилагођена функција коју можете написати за форматирање излазних података. Ево како то можете да примените:
// функција за форматирање ЈСОН података
фунцформатЈСОН(подаци []бајт)низ {
вар оут битес. Буффер
ерр := јсон. Увлачење(&оут, подаци, "", " ")ако ерр != нула {
фмт. Принтлн (грешка)
}
д := ван. бајтови()
повратакниз(д)
}
Можете позвати направи корисника() функционише у програму као што је овај:
фунцглавни() {
фмт. Принтлн(„Постављам ПОСТ захтев...“)
направи корисника("Тим Омолана", "писац")
}
Када покренете програм у терминалу, користећи иди трчи команду, видећете излаз овако:
ГЕТ Рекуест
Следећи код је функција која шаље ГЕТ захтев за преузимање корисника са сервера рекрес.ин користећи њихов јединствени ИД.
// маин.го
фунцгетУсер(ид низ) {
фмт. Принтлн(„Добијање корисника по ИД-у...“)// направи ГЕТ захтев АПИ-ју за добијање корисника по ИД-у
апиУрл := " https://reqres.in/api/users/" + ид
захтев, грешка := хттп. НевРекуест("ДОБИТИ", апиУрл, нула)ако грешка != нула {
фмт. Принтлн (грешка)
}захтев. Хеадер. Комплет("Тип садржаја", „апплицатион/јсон; цхарсет=утф-8")
клијент := &хттп. клијент{}
одговор, грешка := клијент. Уради (захтев)ако грешка != нула {
фмт. Принтлн (грешка)
}респонсеБоди, грешка := ио. Прочитај све (одговор. тело)
ако грешка != нула {
фмт. Принтлн (грешка)
}форматтедДата := форматЈСОН(респонсеБоди)
фмт. Принтлн("Статус: ", одговор. статус)
фмт. Принтлн("Тело одговора: ", форматтедДата)
// очисти меморију након извршења
одложити одговор. Тело. Близу()
}
ГЕТ захтев не шаље податке серверу тако да не прихвата нити шаље тело захтева серверу када је направљен. Ево како ће изгледати пример позива функције изнад:
фунцглавни() {
фмт. Принтлн(„Прављење ГЕТ захтева...“)
гетУсер("2")
}
Излаз:
ПУТ Рекуест
ПУТ захтев је веома сличан ПОСТ захтеву јер такође шаље податке серверу. Главна разлика је у томе што ПОСТ креира нови ресурс док ПУТ ажурира постојећи.
Ево имплементације ПУТ захтева:
// маин.го
фунцупдатеУсер(име, посао, ид низ) {
фмт. Принтлн(„Ажурирање корисника...“)// направи ПУТ захтев АПИ-ју за ажурирање корисника
апиУрл := " https://reqres.in/api/users/" + ид
кориснички подаци := []бајт(`{"наме":"` + име + `","посао":"` + посао + `"}`)// креирање новог хттп ПУТ захтева
захтев, грешка := хттп. НевРекуест("СТАВИТИ", апиУрл, бајтови. НевБуффер (усерДата))
захтев. Хеадер. Комплет("Тип садржаја", „апплицатион/јсон; цхарсет=утф-8")
// Преостало тело функције од цреатеУсер функције...
// Направите захтев, добијте одговор и очистите меморију...
}
Из овог кода можете видети једине разлике између ПУТ захтева и ПОСТ захтева изнад су назив методе и УРЛ. Када користите ПУТ за ажурирање постојећих података, мораћете да додате ИД УРЛ-у захтева. Пример позива ове функције би изгледао овако:
фунц маин() {
// ажурирање уноса са ИД-ом 2.
упдатеУсер("Тим Невнаме", "Стабни писац", "2")
}
Код изнад ажурира корисника и производи следећи излаз:
Захтев за ДЕЛЕТЕ
Користите метод захтева ДЕЛЕТЕ да извршите операцију брисања на веб серверу. Захтев за брисање брише ресурс идентификован УРИ-јем. Захтев за ДЕЛЕТЕ у Го-у изгледа овако:
фунцделетеУсер(ид низ) {
фмт. Принтлн(„Брисање корисника...“)
// направи ДЕЛЕТЕ захтев АПИ-ју за брисање корисника
апиУрл := " https://reqres.in/api/users/" + ид// креирање новог хттп захтева
захтев, грешка := хттп. НевРекуест(„ИЗБРИШИ“, апиУрл, нула)
захтев. Хеадер. Комплет("Тип садржаја", „апплицатион/јсон; цхарсет=утф-8")клијент := &хттп. клијент{}
одговор, грешка := клијент. Уради (захтев)
ако грешка != нула {
фмт. Принтлн (грешка)
}
фмт. Принтлн("Статус: ", одговор. статус)
}
Захтев ДЕЛЕТЕ нити прихвата нити враћа тело, па стога нема потребе за рашчлањивањем или форматирањем ЈСОН захтева и тела одговора. Одговор само враћа статус који указује на успех или неуспех. Ево како изгледа узорак позива функције са њеним излазом:
фунцглавни() {
фмт. Принтлн(„Прављење захтева за ДЕЛЕТЕ...“)
делетеУсер("2")
}
Излаз:
Уштедите време коришћењем хттп. Пошта() и хттп. Добити() методе из нет/хттп пакет за израду ПОШТА и ДОБИТИ захтева директно, без потребе за коришћењем НевРекуест() функција и клијент{} структуру за креирање и израду захтева одвојено. Погледајте нет/хттп документација за више информација.
Прављење ХТТП захтева у Го апликацијама
Тхе хттп пакет у Го пружа све што је потребно за прављење ХТТП захтева и руковање одговорима у Го апликацијама. Функције и структуре које пружа пакет омогућавају вам да креирате и шаљете различите врсте захтева као што су ГЕТ, ПОСТ, ПУТ, ДЕЛЕТЕ и још много тога.
Ово олакшава прављење веб апликација у Го-у које могу да комуницирају са другим веб услугама и АПИ-јима. Добар начин да добијете боље упознати са прављењем ХТТП захтева у Го-у је прављење апликације која шаље захтеве другом РЕСТ АПИ-ју твој.