Создание API аутентификации с помощью Golang

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Небольшая статья для начинающих о том, как создать API аутентификацию с помощью Gо.




Требования


Необходимо установить Go на ваш компьютер.

Приступим к работе


Прежде всего создадим новый проект. Создайте новый файл с именем main.go и введите стартовый код:

package main

import (
  "fmt"
  "net/http"
  "github.com/gin-gonic/gin"
)

Методы POST и GET


Чтобы обрабатывать запросы GET и POST, создадим GetMethod и PostMethod:

func PostMethod(c *gin.Context) {
  fmt.Println("\napi.go 'PostMethod' called")
  message := "PostMethod called"
  c.JSON(http.StatusOK, message)
}
func GetMethod(c *gin.Context) {
  fmt.Println("\napi.go 'GetMethod' called")
  message := "GetMethod called"
  c.JSON(http.StatusOK, message)
}

Основная функция


Необходимо создать роутер Gin для обработки всех запросов:

func main() {
  router := gin.Default()
}

После этого добавим GetMethod и PostMethod:

func main() {
  router := gin.Default()

router.POST("/", PostMethod)
  router.GET("/", GetMethod)

}

И, в завершение всего, добавляем порт, который сервер будет слушать и на котором он будет запускаться:

func main() {
  router := gin.Default()
router.POST("/", PostMethod)
  router.GET("/", GetMethod)
listenPort := "4000"
router.Run(":"+listenPort)
}

Теперь запустим код, чтобы проверить, работает ли сервер.

Аутентификация


Когда базовый веб-сервер настроен, начнем добавлять элементы для API аутентификации.

Начнем с func main():

func main() {
  router := gin.Default()
subRouterAuthenticated := router.Group("/api/v1/PersonId", gin.BasicAuth(gin.Accounts{
    "admin": "adminpass",
  }))
listenPort := "1357"
router.Run(":"+listenPort)
}

Теперь передайте query-параметры:

func main() {
  router := gin.Default()
subRouterAuthenticated := router.Group("/api/v1/PersonId", gin.BasicAuth(gin.Accounts{
    "admin": "adminpass",
  }))
subRouterAuthenticated.GET("/:IdValue", GetMethod)
listenPort := "1357"
  router.Run(":"+listenPort)
}

Настройка GetMethod()


GetMethod() запрашивает и выводит Person IdValue из query-параметра, переданного в URL-адресе API:

func GetMethod(c *gin.Context) {
  fmt.Println("\n'GetMethod' called")
  IdValue := c.Params.ByName("IdValue")
  message := "GetMethod Called With Param: " + IdValue
  c.JSON(http.StatusOK, message)
ReqPayload := make([]byte, 1024)
  ReqPayload, err := c.GetRawData()
  if err != nil {
        fmt.Println(err)
        return
  }
  fmt.Println("Request Payload Data: ", string(ReqPayload))
}

Полный пример:

package main
import (
  "fmt"
  "net/http"
  "github.com/gin-gonic/gin"
)
func GetMethod(c *gin.Context) {
  fmt.Println("\n'GetMethod' called")
  IdValue := c.Params.ByName("IdValue")
  message := "GetMethod Called With Param: " + IdValue
  c.JSON(http.StatusOK, message)
ReqPayload := make([]byte, 1024)
  ReqPayload, err := c.GetRawData()
  if err != nil {
        fmt.Println(err)
        return
  }
  fmt.Println("Request Payload Data: ", string(ReqPayload))
}
func main() {
  router := gin.Default()
subRouterAuthenticated := router.Group("/api/v1/PersonId", gin.BasicAuth(gin.Accounts{
    "admin": "adminpass",
  }))
subRouterAuthenticated.GET("/:IdValue", GetMethod)
listenPort := "1357"
  
  router.Run(":"+listenPort)
}

Тестирование с помощью ngrok


Сначала запустим наше приложение на Go:

go run main.go

1. Скачайте ngrok.

2. Распакуйте исполняемый файл ngrok в папку на сервере.

3. Запустите ngrok на порту 1357 (который вы указали в коде):

./ngrok http 1357

Результат:

ngrok by @emmyc (Ctrl+C to quit)
Session Status online
Session Expires 7 hours, 12 minutes
Version 2.3.35
Region Netherlands (nl)
Web Interface http://127.0.0.1:4040
Forwarding http://ca6d2c4cee3e.ngrok.io -> http://localhost:4000
Forwarding https://ca6d2c4cee3e.ngrok.io -> http://localhost:4000


Команда сгенерирует случайный динамический URL-адрес, по которому вы можете протестировать свой API и войти в систему со своими данными для входа, чтобы проверить, все ли работает.

После входа вы увидите:

GetMethod Called With Param: Id456

Всё работает!

Заключение


В этом небольшом руководстве показано, как создать базовый Go API с помощью Gin. Кроме того, мы узнали, как создать приложение для аутентификации и протестировать его с помощью ngrok.

Надеюсь, этих знаний будет достаточно, чтобы создать собственное приложение с аутентификацией на Go.
Источник: https://habr.com/ru/company/timeweb/blog/535178/


Интересные статьи

Интересные статьи

Hashcat – это самая быстрая и передовая утилита для восстановления паролей, поддерживающая пять уникальных режимов атаки для более чем трёхсот алгоритмов хеширования. Hashcat поддержив...
В первой части мы с вами поговорили о научном оборудовании, которое используется для прочтения, казалось бы, утраченных навсегда текстов. А теперь мы поговорим о том, как обрабаты...
Привет, Хабр. Данный текст можно считать продолжением статьи "Разбираем звук Dial-up модема", в которой разбирался метод установки связи между модемами. Сегодня мы пойдем дальше, и п...
Даже сегодня люди по-прежнему продолжают создавать новые игры для старых консолей. Мы называем их «homebrew». Иногда это способ реализовать детскую мечту о создании игры для консоли, на которой...
В данном туториале мы кратко разберем, как реализовываются REST-запросы к API, требующие, чтобы пользователь был авторизован, и создадим асинхронную «обертку» для запроса, которая будет проверять...