SLIMHTTPは、JSON/XMLサービスを迅速かつ簡単に作成するために使用される単純なAPIライブラリです。これは、すべての追加のRPCロジックとエンコーダー/デコーダーインターフェイスを避けながら、Go-Kit Like Service Definition(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
}
Copyright©2022 S32X
このソフトウェアと関連するドキュメントファイル(「ソフトウェア」)のコピーを取得している人に、これにより許可が無料で許可されます。 、ソフトウェアのコピーを公開、配布、サブライセンス、および/または販売し、次の条件を条件として、ソフトウェアが提供される人を許可します。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、非侵害の保証を含むがこれらに限定されない、明示的または黙示的ないかなる種類の保証もなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたは使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。ソフトウェア。