SLIMHTTP es una biblioteca API simple utilizada para escribir servicios JSON/XML de manera rápida y fácil. Fue escrito con el objetivo de proporcionar una definición de servicio como el kit de go (Slimhttp.endpoint) mientras evita todas las interfaces adicionales de lógica y codificador/decodificador de RPC. El propósito de este proyecto es implementar una gran parte de la placa básica asociada con la escritura de servicios API para que pueda concentrarse en escribir la lógica de negocios.
El corazón de Slimhttp es el tipo de punto final. Todos sus puntos finales a partir de ahora tomarán la forma de la firma de la función a continuación.
type Endpoint func(*http.Request) (interface{}, error)
El uso de un http.handlerfunc fue la fuerza impulsora detrás de escribir esta biblioteca. Satisfacer el tipo http.handlerfunc (incluida toda la codificación y verificación de errores en la misma función) no era algo de lo que era fanático y, por lo tanto, se me ocurrió el tipo anterior para hacer las cosas un poco más sencillas. El uso del nuevo tipo de punto final anterior ahora le brinda la capacidad de descargar toda la codificación y el manejo de errores en esta biblioteca, lo que hace que el proceso de implementación de la lógica comercial sea un poco más limpia.
Este es solo el comienzo para este proyecto. Entiendo que es extremadamente básico y ese es el punto. Si hay algo que realmente te gustaría ver implementado que usas normalmente en tu lógica de API, ¡me encantaría saberlo! - Publique un problema o una solicitud de extracción.
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
Por la presente, se otorga el permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otro responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado, de o en relación con el software o el uso u otros tratos en el SOFTWARE.