SlimHTTP는 JSON/XML 서비스를 빠르고 쉽게 작성하는 데 사용되는 간단한 API 라이브러리입니다. 모든 추가 RPC 로직 및 인코더/디코더 인터페이스를 피하면서 서비스 정의 (slimhttp.endpoint)를 제공하기 위해 작성되었습니다. 이 프로젝트의 목적은 비즈니스 논리 작성에 집중할 수 있도록 API 서비스 작성과 관련된 많은 기본 보일러 플레이트를 구현하는 것입니다.
slimhttp의 핵심은 종말점 유형입니다. 지금부터 모든 엔드 포인트는 아래 기능 서명의 형태를 취합니다.
type Endpoint func(*http.Request) (interface{}, error)
http.handlerfunc의 사용은이 도서관을 작성하는 원동력이었습니다. http.handlerfunc 유형을 만족시키는 것은 (동일한 함수에서 모든 인코딩 및 오류 확인 포함) 내가 팬이었던 것이 아니 었으므로 위의 유형을 생각해 내기 위해 물건을 좀 더 간단하게 만들었습니다. 위의 새로운 엔드 포인트 유형을 사용하면이 라이브러리에 모든 인코딩 및 오류 처리를 오프로드 할 수있어 비즈니스 로직 구현 프로세스가 약간 더 깨끗합니다.
이것은이 프로젝트의 시작일뿐입니다. 나는 그것이 매우 기본적이라는 것을 이해하고 그것은 일종의 요점입니다. API 논리에서 정상적으로 사용하는 구현을 정말로보고 싶은 것이 있다면, 나는 그것에 대해 듣고 싶습니다! - 문제 또는 풀 수감을 게시하십시오.
package main
import (
"errors"
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
"github.com/s32x/slimhttp"
)
func main () {
r := slimhttp . NewRouter () // Create a new router
r . HandleJSONEndpoint ( "/hello/{name}/" , Hello ) // Bind an Endpoint to the router at the specified path
log . Fatal ( r . ListenAndServe ( 8080 )) // Start the service!
}
// HelloResponse is an example response struct that will be
// encoded to JSON on a Hello request
type HelloResponse struct {
Message string `json:"message"`
Success bool `json:"success"`
}
// Hello is an example Endpoint method. It receives a request
// so that you have access to everything on the request and
// returns a successful body or error
func Hello ( r * http. Request ) ( interface {}, error ) {
name := mux . Vars ( r )[ "name" ] // The name passed on the request
switch name {
case "basic-error" :
// An example of returning a raw error
err := errors . New ( "This is a basic error" )
return nil , err
case "standard-error" :
// An example of returning a predefined Error
return nil , slimhttp . ErrorBadRequest
case "fancy-error" :
// An example of returning a fully self-defined Error
err := errors . New ( "This is a fancy error" )
return nil , slimhttp . NewError ( "This is a fancy error!" , http . StatusBadRequest , err )
}
// All other names will be returned on a HelloResponse
return & HelloResponse {
Message : fmt . Sprintf ( "Hello %s!" , name ),
Success : true ,
}, nil
}
저작권 © 2022 S32X
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가가 부여되어 제한없이 소프트웨어를 처리하여 사용, 복사, 수정, 병합을 포함하여 제한없이 소프트웨어를 처리합니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비방 지분에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.