SlimHTTP est une simple bibliothèque d'API utilisée pour écrire des services JSON / XML rapidement et facilement. Il a été écrit dans le but de fournir une définition de service comme un kit (SlimHttp.endpoint) tout en évitant toutes les interfaces de logique RPC et d'encodeur / décodeur supplémentaires supplémentaires. Le but de ce projet est de mettre en œuvre une grande partie de la passerelle de base associée à la rédaction des services d'API afin que vous puissiez vous concentrer sur la rédaction de la logique métier.
Le cœur de Slimhttp est le type de point de terminaison. Tous vos points de terminaison à partir de maintenant prendront la forme de la signature de la fonction ci-dessous.
type Endpoint func(*http.Request) (interface{}, error)
L'utilisation d'un http.handlerfunc a été le moteur de la rédaction de cette bibliothèque. Satisfaire le type http.handlerfunc (y compris tout le codage et la vérification des erreurs dans la même fonction) n'était pas quelque chose dont j'étais fan et a donc trouvé le type ci-dessus pour rendre les choses un peu plus simples. L'utilisation du nouveau type de point de terminaison ci-dessus vous donne désormais la possibilité de décharger tous les codages et la gestion des erreurs à cette bibliothèque, ce qui rend le processus d'implémentation de la logique métier un peu plus propre.
Ce n'est que le début de ce projet. Je comprends que c'est extrêmement basique et c'est en quelque sorte le point. S'il y a quelque chose que vous aimeriez vraiment voir implémenté que vous utilisez normalement dans votre logique API, j'aimerais en entendre parler! - publier un problème ou une demande de traction.
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
L'autorisation est accordée gratuitement par la présente à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le «logiciel»), pour traiter dans le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copier, de modifier, de fusionner , publier, distribuer, sous-licencier et / ou vendre des copies du logiciel, et pour permettre aux personnes à qui le logiciel est fourni pour le faire, sous réserve des conditions suivantes:
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation sont inclus dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni «tel quel», sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les titulaires de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres transactions dans le LOGICIEL.