SlimHttp ist eine einfache API -Bibliothek, die zum Schreiben von JSON/XML -Diensten schnell und einfach verwendet wird. Es wurde mit dem Ziel geschrieben, eine Go-Kit-ähnliche Servicedefinition (SlimHttp.endpoint) bereitzustellen und gleichzeitig alle zusätzlichen RPC-Logik- und Encoder-/Decoder-Schnittstellen zu vermeiden. Ziel dieses Projekts ist es, einen Großteil der mit dem Schreiben von API -Diensten verbundenen grundlegenden Kesselplatten zu implementieren, damit Sie sich auf das Schreiben von Geschäftslogik konzentrieren können.
Das Herz von SlimHttp ist der Endpunkttyp. Alle Ihre Endpunkte werden von nun an die Form der folgenden Funktionssignatur annehmen.
type Endpoint func(*http.Request) (interface{}, error)
Die Verwendung eines http.handlerfunc war die treibende Kraft hinter dem Schreiben dieser Bibliothek. Die Befriedigung des Typs http.Handlerfunc (einschließlich aller Codierung und Fehlerprüfung in derselben Funktion) war nicht etwas, von dem ich ein Fan war, von dem ich war und somit über den oben genannten Typ kam, um die Dinge etwas einfacher zu machen. Wenn Sie den obigen neuen Endpunkttyp verwenden, können Sie alle Codierung und Fehlerbehebung in diese Bibliothek abladen, wodurch die Implementierung der Geschäftslogik etwas sauberer wird.
Dies ist nur der Anfang für dieses Projekt. Ich verstehe, dass es äußerst einfach ist und das ist der Punkt. Wenn es etwas gibt, das Sie wirklich gerne implementieren möchten, das Sie normalerweise in Ihrer API -Logik verwenden, würde ich gerne davon hören! - Veröffentlichen Sie ein Problem oder eine Pull-Request.
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
Die Erlaubnis wird hiermit einer Person, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien (der „Software“) erhält, kostenlos erteilt, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte zu verwenden, zu kopieren, zu modifizieren, zu verschmelzen, verschmelzen , veröffentlichen, vertreiben, unterlizenzieren und/oder Kopien der Software verkaufen und Personen, denen die Software dazu bereitgestellt wird, unter den folgenden Bedingungen ermöglicht:
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird „wie es ist“ ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall haftet die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen, sei es in einer Vertragsklage, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder anderen Geschäften in der SOFTWARE.