> 백엔드 개발 > Golang > GopherLight를 사용하여 Go에서 전문가처럼 API를 작성하는 방법

GopherLight를 사용하여 Go에서 전문가처럼 API를 작성하는 방법

Linda Hamilton
풀어 주다: 2024-10-30 16:56:03
원래의
1060명이 탐색했습니다.

How to Write APIs Like a Pro in Go with GopherLight

문서

고퍼라이트

안녕하세요 여러분, 먼저 저희 프로젝트를 선택해 주셔서 감사하다는 말씀을 전하고 싶습니다. 비록 그는 작지만 우리는 큰 열정으로 해냈습니다! 사용을 시작하려면 먼저 설치해야 합니다. 이미 설치했다고 가정해 보겠습니다. 그런 다음 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.Get(경로, 핸들러)

아무 것도 수정하지 않고 데이터를 검색합니다.
예: 항목 목록 가져오기 또는 사용자 세부정보 읽기

우편

  • 사용법: app.Post(경로, 핸들러)

새 리소스를 생성하기 위해 데이터를 보냅니다.
예: 양식 제출 또는 목록에 새 항목 추가

놓다

사용법: app.Put(경로, 핸들러)

리소스를 업데이트하거나 교체합니다. "덮어쓰기" 작업입니다.
예: 전체 사용자 프로필 업데이트

삭제

사용법: app.Delete(경로, 핸들러)

리소스를 삭제합니다.
예: 사용자 제거 또는 게시물 삭제.

반점

사용법: app.Patch(경로, 핸들러)

모든 것을 교체하지 않고 리소스를 부분적으로 업데이트합니다.
예: 사용자 프로필의 이메일만 업데이트합니다.

옵션

사용법: app.Options(경로, 핸들러)

주로 CORS 실행 전 요청에 대해 URL에 허용된 HTTP 메서드를 반환합니다.

머리

사용법: app.Head(경로, 핸들러)

GET과 비슷하지만 응답 본문이 없습니다. 리소스가 존재하는지 확인하는 데 사용하세요.

연결 및 추적

사용법: app.Connect(경로, 핸들러), app.Trace(경로, 핸들러)

고급 방법: CONNECT는 터널(SSL용)을 설정하고 TRACE는 디버깅을 위한 것이며 요청을 다시 반영합니다.

req.Request 및 req.Response 작업

이제 경로를 살펴보았으므로 들어오는 요청을 처리하고 응답을 보내는 데 도움이 되는 요청 및 응답 개체에 대해 이야기해 보겠습니다.

요구

각 요청 핸들러는 들어오는 요청에 대한 정보가 로드된 요청 개체를 가져옵니다. 이를 통해 수행할 수 있는 작업은 다음과 같습니다.

  • 쿼리 매개변수: .QueryParam("key")를 사용하여 쿼리 매개변수를 가져옵니다.
  • 헤더: .Header("key")를 사용하여 헤더에 액세스합니다.
  • Body as String: .BodyAsString()을 사용하여 요청 본문을 가져옵니다.

예:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
로그인 후 복사
로그인 후 복사
로그인 후 복사

응답

응답 개체는 클라이언트에게 응답을 다시 보내는 데 도움이 됩니다. 할 수 있는 일은 다음과 같습니다.

  • 텍스트 보내기: .Send(데이터 문자열)는 일반 텍스트를 다시 씁니다.
  • 상태 설정: .Status(code)는 HTTP 상태를 설정합니다.
  • JSON 보내기: .JSON(data)는 Go 객체를 JSON으로 직렬화하여 보냅니다.
  • 오류 처리: .JSONError(message)는 JSON 형식의 오류 응답을 보냅니다.

예:

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")
}
로그인 후 복사
로그인 후 복사
로그인 후 복사

미들웨어

Go 웹 앱에 몇 가지 중요한 기능을 추가할 수 있는 일련의 미들웨어가 준비되어 있습니다. 이러한 각 미들웨어는 보안, 로깅, 시간 초과 등 고유한 마법을 제공합니다! 하나씩 분석해 보겠습니다. ?

인증 미들웨어(JWT)

저희 AuthMiddleware는 JWT(JSON 웹 토큰)로 경로를 보호하는 데 도움이 됩니다. 유연하게 비밀 키, 오류 처리, 토큰 추출 방법을 맞춤 설정할 수 있습니다.

설정
시작하려면 JWTConfig를 사용하여 JWT 설정을 구성하세요.

  • SecretKey: JWT 서명을 위한 비밀 키입니다.
  • 서명 방법: JWT 서명 알고리즘
  • ErrorHandler: 인증 오류 처리를 위한 사용자 정의 오류 처리기(선택 사항).
  • TokenExtractor: 요청 헤더에서 토큰을 추출합니다(선택 사항).

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
로그인 후 복사
로그인 후 복사

CORS 미들웨어

교차 출처 요청을 허용해야 합니까? 괜찮아요! CORSMiddleware는 다른 도메인에서 API에 액세스할 수 있도록 CORS(Cross-Origin Resource Sharing) 설정을 구성합니다.

구성 옵션

  • AllowOrigin: 모든 출처를 허용하거나 도메인(예: "http://example.com")을 지정하려면 "*"로 설정하세요.
  • AllowMethods: 어떤 HTTP 메소드가 허용됩니까? 일반적인 선택에는 "GET", "POST" 등이 있습니다.
  • AllowHeaders: 클라이언트가 사용할 수 있는 헤더를 지정합니다.
  • AllowCredentials: 쿠키나 HTTP 인증을 포함하려면 true로 설정하세요.
  • ExposeHeaders: 클라이언트가 응답에서 특정 헤더를 읽도록 합니다.
  • MaxAge: 실행 전 요청에 대한 캐시 시간(초).

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})
로그인 후 복사
로그인 후 복사

CSRF 미들웨어

저희 CSRFMiddleware는 각 요청과 함께 전송된 CSRF 토큰을 검증하여 교차 사이트 요청 위조를 방지합니다. 생성CSRFToken()을 사용하여 보안 토큰을 생성한 다음 자체 isValidToken 함수로 유효성을 검사하세요.

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))
로그인 후 복사
로그인 후 복사

다음을 사용하여 토큰을 생성하는 것을 잊지 마세요.

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
로그인 후 복사
로그인 후 복사
로그인 후 복사

로깅 미들웨어

서버에서 무슨 일이 일어나고 있는지 추적하고 싶으십니까? LoggingMiddleware는 메서드, 경로, 소요 시간을 포함하여 각 요청을 기록합니다. 이는 앱 성능과 비정상적인 활동에 대한 최신 정보를 얻을 수 있는 좋은 방법입니다.

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")
}
로그인 후 복사
로그인 후 복사
로그인 후 복사

각 요청은 다음과 같이 기록됩니다.

  • 시작됨: 요청 시작 시간을 기록합니다.
  • 완료됨: 요청이 완료되면 기간을 포함하여 기록합니다.

시간 초과 미들웨어

TimeoutMiddleware로 요청 처리에 시간 제한을 설정하여 끝없는 대기를 방지하세요. 이 미들웨어는 요청이 시간 내에 완료되지 않으면 요청을 취소하고 504 게이트웨이 시간 초과 상태를 클라이언트에 보냅니다.

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
로그인 후 복사
로그인 후 복사

플러그인 인터페이스

플러그인 인터페이스는 매우 간단하지만 매우 강력합니다. 이는 단일 방법인 등록을 제공합니다. 이를 통해 앱의 라우팅 시스템에 연결하여 새로운 API 엔드포인트, 웹훅 등 상상할 수 있는 모든 경로를 추가할 수 있습니다.

등록방법
플러그인 인터페이스의 놀라운 부분은 다음과 같습니다.

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})
로그인 후 복사
로그인 후 복사

Register 메소드는 다음을 지정하여 플러그인에서 새 경로를 정의할 수 있는 경로 기능을 허용합니다.

  • 메서드: HTTP 메서드(예: "GET", "POST" 등)
  • path: 경로 경로(예: "/my-plugin-route")
  • 핸들러: 경로에 도달했을 때 실행되는 함수입니다. 이 함수는 다음을 수신합니다:
    • req: 쿼리 매개변수, 헤더 및 본문에 액세스할 수 있는 요청 개체입니다.
    • res: 클라이언트에 데이터를 다시 보내는 응답 개체

예제 플러그인

사용자에게 인사하기 위해 /hello-plugin에 간단한 엔드포인트를 추가하는 플러그인을 생성한다고 가정해 보겠습니다. 플러그인의 모습은 다음과 같습니다.

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))
로그인 후 복사
로그인 후 복사

앱에 플러그인 추가

플러그인을 로드하려면 인스턴스를 생성하고 기본 앱 설정에서 Register를 호출하면 됩니다.

corsOptions := middleware.CORSOptions{
    AllowOrigin: "*",
    AllowMethods: []string{"GET", "POST"},
}
app.Use(middleware.CORSMiddleware(corsOptions))
로그인 후 복사

플러그인 사용자 정의

각 플러그인은 필요한 만큼 경로를 추가할 수 있습니다. 추가 엔드포인트를 정의하려면 Register 함수에서 Route를 여러 번 호출하면 됩니다. 다양한 HTTP 메소드, 경로 및 핸들러를 사용하여 플러그인 기능을 원하는 대로 구성하세요.

위 내용은 GopherLight를 사용하여 Go에서 전문가처럼 API를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿