Голанг

Как создать API Go (Golang) в 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 - 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, который вы можете расширить и заставить делать что-то полезное.

Спасибо за прочтение! Если возникнут какие-либо вопросы, дайте мне знать в комментариях.