고퍼라이트
안녕하세요 여러분, 먼저 저희 프로젝트를 선택해 주셔서 감사하다는 말씀을 전하고 싶습니다. 비록 그는 작지만 우리는 큰 열정으로 해냈습니다! 사용을 시작하려면 먼저 설치해야 합니다. 이미 설치했다고 가정해 보겠습니다. 그런 다음 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 메서드
다음은 router.App과 함께 사용할 수 있는 HTTP 메소드 목록입니다. 이들 각각을 사용하면 다양한 유형의 요청을 처리하기 위한 경로를 설정할 수 있습니다. 뛰어들어 보세요!
아무 것도 수정하지 않고 데이터를 검색합니다.
예: 항목 목록 가져오기 또는 사용자 세부정보 읽기
새 리소스를 생성하기 위해 데이터를 보냅니다.
예: 양식 제출 또는 목록에 새 항목 추가.
사용법: app.Put(경로, 핸들러)
리소스를 업데이트하거나 교체합니다. "덮어쓰기" 작업입니다.
예: 전체 사용자 프로필 업데이트.
사용법: app.Delete(경로, 핸들러)
리소스를 삭제합니다.
예: 사용자 제거 또는 게시물 삭제.
사용법: app.Patch(경로, 핸들러)
모든 것을 교체하지 않고 리소스를 부분적으로 업데이트합니다.
예: 사용자 프로필의 이메일만 업데이트합니다.
사용법: app.Options(경로, 핸들러)
주로 CORS 실행 전 요청에 대해 URL에 허용된 HTTP 메소드를 반환합니다.
사용법: app.Head(경로, 핸들러)
GET과 비슷하지만 응답 본문이 없습니다. 리소스가 존재하는지 확인하는 데 사용합니다.
사용법: app.Connect(경로, 핸들러), app.Trace(경로, 핸들러)
고급 방법: CONNECT는 터널(SSL용)을 설정하고 TRACE는 디버깅을 위한 것이며 요청을 다시 반영합니다.
이제 경로를 살펴보았으므로 들어오는 요청을 처리하고 응답을 보내는 데 도움이 되는 도우미인 요청 및 응답 개체에 대해 이야기해 보겠습니다.
각 요청 핸들러는 들어오는 요청에 대한 정보가 로드된 요청 개체를 가져옵니다. 이를 통해 수행할 수 있는 작업은 다음과 같습니다.
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " name "!") })
응답 개체는 클라이언트에 응답을 다시 보내는 데 도움이 됩니다. 수행할 수 있는 작업은 다음과 같습니다.
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Go 웹 앱에 몇 가지 중요한 기능을 추가할 수 있는 일련의 미들웨어가 준비되어 있습니다. 이러한 각 미들웨어는 보안, 로깅, 시간 초과 등 고유한 마법을 제공합니다! 하나씩 분석해 보겠습니다. ?
저희 AuthMiddleware는 JWT(JSON 웹 토큰)로 경로를 보호하는 데 도움이 됩니다. 유연성이 뛰어나 비밀 키, 오류 처리, 토큰 추출 방법을 맞춤 설정할 수 있습니다.
설정
시작하려면 JWTConfig:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
교차 출처 요청을 허용해야 합니까? 괜찮아요! CORSMiddleware는 다른 도메인에서 API에 액세스할 수 있도록 CORS(Cross-Origin Resource Sharing) 설정을 구성합니다.
구성 옵션
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
저희 CSRF미들웨어는 각 요청과 함께 전송된 CSRF 토큰을 검증하여 교차 사이트 요청 위조로부터 보호합니다. 생성CSRFToken()을 사용하여 보안 토큰을 생성한 다음 자체 isValidToken 함수로 유효성을 검사합니다.
app.Use(middleware.CSRFMiddleware(func(token string) bool { return token == "your_valid_token" }))
그리고 다음을 사용하여 토큰을 생성하는 것을 잊지 마세요:
csrfToken := middleware.GenerateCSRFToken()
서버에서 무슨 일이 일어나고 있는지 추적하고 싶으십니까? LoggingMiddleware는 메서드, 경로, 소요 시간을 포함하여 각 요청을 기록합니다. 이는 앱 성능과 비정상적인 활동에 대한 최신 정보를 얻을 수 있는 좋은 방법입니다.
app.Use(middleware.LoggingMiddleware)
각 요청은 다음과 같이 기록됩니다.
TimeoutMiddleware로 요청 처리에 시간 제한을 설정하여 끝없는 대기를 방지하세요. 이 미들웨어는 요청이 시간 내에 완료되지 않으면 요청을 취소하고 504 게이트웨이 시간 초과 상태를 클라이언트에 보냅니다.
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!") }) }
플러그인을 로드하려면 인스턴스를 생성하고 기본 앱 설정에서 Register를 호출하면 됩니다.
package main import ( "github.com/BrunoCiccarino/GopherLight/router" ) func main() { app := router.NewApp() helloPlugin := &HelloPlugin{} helloPlugin.Register(app.Route) app.Listen(":3333") }
각 플러그인은 필요한 만큼 경로를 추가할 수 있습니다. 추가 엔드포인트를 정의하려면 Register 함수에서 Route를 여러 번 호출하면 됩니다. 다양한 HTTP 메소드, 경로 및 핸들러를 사용하여 플러그인 기능을 원하는 대로 구성하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3