Голанг

Как да създадете Go (Golang) API на Google App Engine

Проста инструкция за създаване на API със сървър, написан на Go, за внедряване в Google App Engine.

Защо Google App Engine?

Google App Engine е платформа като услуга (PaaS). Целта му е да улесни внедряването. Той е напълно управляван, разплащателен, висока достъпност, осигурява бързо излизане на пазара и поддържа голямо разнообразие от езици за програмиране.

App Engine ви позволява да създавате мащабируеми уеб и мобилни бек-ендове с разделяне на трафика и възможности за защитна стена.

Стандартна срещу гъвкава среда

Имате две възможности, когато създавате среда на App Engine:

  • Стандартен — Приложенията се изпълняват в пясъчна среда. Изберете това, ако имате нужда от бързо мащабиране или изпитвате драматични и неочаквани пикове на трафик
  • Гъвкав —Екземпляритесе изпълняват в Docker контейнери на виртуални машини на Compute Engine. Изберете това, ако имате постоянен трафик, трябва да мащабирате нагоре или надолу или имате достъп до ресурси на Compute Engine.


Важно е да се отбележи, че URL адресът на приложението на App Engine ще бъде именуван въз основа на името на проекта. Така че вземете това предвид, когато избирате своя облачен проект.

Да започваме!

1) Настройване на App Engine в Cloud Console

Първо, нека настроим проекта App Engine.

Отидете на https://console.cloud.google.com/appengine.

След известна автоматична инициализация трябва да бъдете посрещнати с този екран...

Кликнете върху „Първи стъпки

Изберете „Старт“ от падащото меню.

Ще използваме стандартната среда за този пример.

Следващите стъпки са да изтеглите SDK



Това ви дава достъп до инструментите на командния ред (CLI).

Инициализирайте проекта

С помощта на командата gcloud инициализирайте проекта.

$ gcloud init

Докато не внедрите приложението си в машината за приложения, таблото ви за управление ще изглежда така.

Така че сега, когато машината за приложения е напълно настроена, е време всъщност да напишем нашия сървър.

2) Напишете просто сървърно приложение в Go

Ще използваме Go версия 1.14. Ще използваме и Go модули.

Има 3 файла, които са от съществено значение за нашето приложение. Те са описани по-долу.

Конфигурация по време на изпълнение — app.yaml

Първият файл, който трябва да създадем, е файлът app.yaml. Този файл е задължителен в проект на машина за приложения.

Go Module — go.mod

Също така трябва да създадем нашия Go модул.

Главен файл — main.go

Първо, трябва да създадем функция в главния файл, която хваща номера на порта. Това е просто функция, която просто получава съответния номер на порт, който нашият API слуша въз основа на текущата среда.

Използваме библиотеката os, за да получим порта (ако е променлива на средата), по подразбиране порт 8080, ако променливата на средата не е зададена, и връщаме номера на порта на повикващия като string.

Инициализирайте клиента на нашия HTTP сървър

Нека създадем нашия прост HTTP сървър за слушане на заявки.

Първо ще получим порта с помощта на нашата функция getPort(), която създадохме по-рано.

След това ще напишем нашата функция за анонимен манипулатор, която да обработва заявки и да се справя с отговора.

Нашият API все още не прави нищо, така че е доста безполезен. Но скоро ще започнем да обработваме някои параметри, както бихте направили в действителен API.

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

Както можете да видите, функцията за обратно извикване приема два параметъра http.ResponseWriter за запис на отговора и *http.Request, който е указател към обекта Request.



Работа с параметрите на заявката

API е твърде елементарен в момента. В реалния свят ще трябва да обработвате параметри на заявката, за да захранвате нашия API.

Работата с параметрите на заявката е доста проста в Go. Просто трябва да запомните, че при достъп до параметър на заявка с URL.Query()['value'], той винаги ще връща масив от елементи. Така че се уверете, че имате достъп до стойността чрез индексиране на масив.

Вместо да пишем анонимна функция като обратно извикване на функцията HandleFunc, ние ще предоставим нашата нова функция APIHandler за обработка на заявката заедно с всички параметри, предоставени в URL адреса.

Нашата функция APIHandler трябва да отговаря на подписа за обратно извикване, така че имаме нашите два параметъра http.ResponseWriter и *http.Request.

В тази примерна функция ние не приемаме POST заявка и връщаме по-рано с HTTP грешка, ако случаят е такъв.

След това хващаме параметъра на заявката value, ако има такъв. Ако е невалиден или празен, ние се връщаме и не правим нищо.

Ако съществува и е валиден, връщаме стойността в отговора (за демонстрационни цели).

Това е нашият основен API, написан...

3) Разположете в App Engine

Изпълнението на командата gcloud init в по-ранната стъпка трябва да ви е влязло в акаунта ви в облака в Google. Но ако не, стартирайте gcloud auth login, за да влезете.

След тази стъпка ще искате да внедрите приложението си в App Engine, като използвате

$ gcloud app deploy

Това означава, че вашият API е успешно внедрен на предоставения URL адрес.

4) Тествайте приложението

Намерете вашия резервиран URL адрес на машина за приложения в облачната конзола на Google.

За да тествате дали всичко е готово и работи, всичко, което трябва да направите, е да щракнете върху връзката, за да видите вашето работещо приложение за двигател на приложения.

Можете да видите дали приложението ви е анализирало успешно параметрите на заявката, като тествате URL адреса (като го въведете в браузъра).

https://<INSERT_PROJECT_ID>.uc.r.appspot.com/?value=hello

Това е! 🚀

Сега имате основен API, внедрен в App Engine, написан на Go, който можете да разширите и да го накарате да прави нещо полезно.

Благодаря за четенето! Ако имате въпроси, уведомете ме в коментарите.