O Slimhttp é uma biblioteca de API simples usada para escrever serviços JSON/XML de maneira rápida e fácil. Foi escrito com o objetivo de fornecer uma definição de serviço do kit (slimhttp.endpoint), enquanto evitava toda a lógica RPC extra e interfaces do codificador/decodificador. O objetivo deste projeto é implementar muitos do clique básico associados à gravação de serviços de API para que você possa se concentrar na redação da lógica de negócios.
O coração de Slimhttp é o tipo de endpoint. Todos os seus terminais a partir de agora assumirão a forma da assinatura da função abaixo.
type Endpoint func(*http.Request) (interface{}, error)
O uso de um http.handlerfunc foi a força motriz por trás da escrita desta biblioteca. Satisfazer o tipo http.handlerfunc (incluindo toda a codificação e verificação de erros na mesma função) não era algo que eu era um fã e, portanto, criei o tipo acima para tornar as coisas um pouco mais diretas. O uso do novo tipo de extremidade acima agora oferece a capacidade de descarregar toda a codificação e manuseio de erros nessa biblioteca, tornando um pouco o processo de implementação da lógica de negócios.
Este é apenas o começo deste projeto. Eu entendo que é extremamente básico e esse é o tipo de ponto. Se há algo que você realmente gostaria de ver implementado que você usa normalmente em sua lógica da API, eu adoraria ouvir sobre isso! - Publique um problema ou uma solicitação de tração.
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
A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de uso, copiar, modificar, mesclar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.