SLIMHTTP - это простая библиотека API, используемая для быстро и легко написания услуг JSON/XML. Он был написан с целью предоставления определения обслуживания, подобного обслуживанию (slimhttp.endpoint), избегая всех дополнительных интерфейсов логики RPC и энкодера/декодера. Цель этого проекта - реализация многих основных шаблонов, связанных с написанием услуг 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
Настоящее разрешение предоставляется бесплатно любому лицу, получающему копию этого программного обеспечения и соответствующие файлы документации («Программное обеспечение»), для работы в программном обеспечении без ограничений, включая, без ограничения, права на использование, копирование, изменение, объединение , публиковать, распространять, сублиценс и/или продавать копии программного обеспечения и разрешить лицам, которым предоставлено программное обеспечение, при условии следующих условий:
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть» без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и неинфекции. Ни в коем случае не будут нести ответственность авторов или владельцев авторских прав за любые претензии, ущерб или другую ответственность, будь то в действии контракта, деликт или иным образом, возникающие из или в связи с программным обеспечением или использования или других сделок в ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.