СусликСВЕТ
Привет, ребята, во-первых, я хотел бы поблагодарить вас за то, что вы решили использовать наш проект. Хоть он и маленький, но мы сделали это с большим энтузиазмом! Чтобы начать использовать его, вам сначала необходимо установить go, предположим, что он у вас уже есть. Затем установите основные модули фреймворка: req и router
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Уже скачано? Уф! Теперь мы можем сделать наш первый Hello World.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Довольно просто, правда? И с GopherLight мы можем сделать гораздо больше. Продолжайте читать, чтобы получить полную информацию о методах HTTP и наших инструментах запросов и ответов.
Поддерживаемые методы HTTP
Вот список методов HTTP, которые вы можете использовать с router.App. Каждый из них позволяет вам настраивать маршруты для обработки различных типов запросов. Давайте погрузимся!
Извлекает данные, ничего не изменяя.
Пример: получение списка элементов или чтение сведений о пользователе.
Отправляет данные для создания нового ресурса.
Пример: отправка формы или добавление нового элемента в список.
Использование: app.Put(путь, обработчик)
Обновляет или заменяет ресурс. Это действие «перезаписи».
Пример: обновление полного профиля пользователя.
Использование: app.Delete(путь, обработчик)
Удаляет ресурс.
Пример: удаление пользователя или сообщения.
Использование: app.Patch(путь, обработчик)
Частично обновляет ресурс, не заменяя всего.
Пример: обновление только адреса электронной почты в профиле пользователя.
Использование: app.Options(путь, обработчик)
Возвращает разрешенные методы HTTP для URL-адреса, в основном для предварительных запросов CORS.
Использование: app.Head(путь, обработчик)
Как GET, но без тела ответа. Используйте его, чтобы проверить, существует ли ресурс.
Использование: app.Connect(путь, обработчик), app.Trace(путь, обработчик)
Расширенные методы: CONNECT устанавливает туннель (для SSL), а TRACE предназначен для отладки и возврата запроса.
Теперь, когда вы увидели маршруты, давайте поговорим об объектах Request и Response, ваших помощниках для обработки входящих запросов и отправки ответов.
Каждый обработчик запроса получает объект Request, загружающий информацию о входящем запросе. Вот что вы можете с этим сделать:
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " name "!") })
Объект Response помогает отправить ответ обратно клиенту. Вот что вы можете сделать:
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
У нас есть готовый набор промежуточного программного обеспечения, позволяющего добавить серьезную функциональность в ваше веб-приложение Go. Каждое из этих промежуточных программ несет в себе свою магию — безопасность, ведение журналов, таймауты и многое другое! Давайте разберем их один за другим. ?
Наше AuthMiddleware помогает защитить ваши маршруты с помощью веб-токенов JSON (JWT). Он гибкий и позволяет настраивать секретный ключ, обработку ошибок и метод извлечения токенов.
Настраивать
Для начала настройте параметры JWT с помощью JWTConfig:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Нужно разрешить запросы из разных источников? Без проблем! Наше CORSMiddleware настраивает параметры совместного использования ресурсов между источниками (CORS), чтобы сделать ваш API доступным из других доменов.
Параметры конфигурации
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
Наше CSRFMiddleware защищает от подделки межсайтовых запросов путем проверки токена CSRF, отправляемого с каждым запросом. Используйте GenerateCSRFToken(), чтобы создать безопасный токен, а затем проверьте его с помощью собственной функции isValidToken.
app.Use(middleware.CSRFMiddleware(func(token string) bool { return token == "your_valid_token" }))
И не забудьте сгенерировать токены с помощью:
csrfToken := middleware.GenerateCSRFToken()
Хотите следить за тем, что происходит на вашем сервере? LoggingMiddleware регистрирует каждый запрос, включая метод, путь и затраченное время. Это отличный способ быть в курсе производительности приложения и любых необычных действий.
app.Use(middleware.LoggingMiddleware)
Каждый запрос будет регистрироваться следующим образом:
Избегайте бесконечных ожиданий, установив ограничения по времени на обработку запросов с помощью TimeoutMiddleware. Это промежуточное программное обеспечение отменит запрос, если он не будет завершен вовремя, отправив клиенту статус 504 Gateway Timeout.
import ( "time" "github.com/BrunoCiccarino/GopherLight/middleware" ) timeout := 2 * time.Second app.Use(middleware.TimeoutMiddleware(timeout))
Интерфейс плагина очень простой, но очень мощный. Он дает вам единственный метод: зарегистрироваться. Это позволяет вам подключиться к системе маршрутизации приложения и добавлять любые необходимые маршруты — будь то новая конечная точка API, веб-перехватчик или что-то еще, что вы можете себе представить.
Метод регистрации
Вот волшебная часть интерфейса плагина:
type Plugin interface { Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) }
Метод Register принимает функцию маршрута, которая позволяет вам определять новые маршруты в вашем плагине, указав:
Предположим, вы хотите создать плагин, который добавляет простую конечную точку /hello-plugin для приветствия пользователей. Вот как будет выглядеть плагин:
package main import ( "github.com/BrunoCiccarino/GopherLight/plugins" "github.com/BrunoCiccarino/GopherLight/req" ) type HelloPlugin struct{} // Register adds a new route for the HelloPlugin. func (p *HelloPlugin) Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) { route("GET", "/hello-plugin", func(req *req.Request, res *req.Response) { res.Send("Hello from the HelloPlugin!") }) }
Чтобы загрузить плагин, просто создайте экземпляр и вызовите «Регистрация» в основных настройках приложения:
package main import ( "github.com/BrunoCiccarino/GopherLight/router" ) func main() { app := router.NewApp() helloPlugin := &HelloPlugin{} helloPlugin.Register(app.Route) app.Listen(":3333") }
Каждый плагин может добавлять столько маршрутов, сколько необходимо. Просто вызовите маршрут несколько раз в функции Register, чтобы определить дополнительные конечные точки. Используйте различные HTTP-методы, пути и обработчики, чтобы формировать функциональность вашего плагина так, как вы хотите.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3