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
}
版權所有©2022 S32X
特此免費授予任何獲得此軟件副本和相關文檔文件副本(“軟件”)的人,以無限制處理該軟件,包括無限制,使用,複製,修改,合併的權利,發布,分發,分佈和/或出售該軟件的副本,並允許提供該軟件的人,但要遵守以下條件:
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“按原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.