SlimHTTP adalah perpustakaan API sederhana yang digunakan untuk menulis layanan JSON/XML dengan cepat dan mudah. Itu ditulis dengan tujuan memberikan definisi layanan seperti go-kit (slimhttp.endpoint) sambil menghindari semua logika RPC tambahan dan antarmuka encoder/decoder. Tujuan dari proyek ini adalah untuk mengimplementasikan banyak boilerplate dasar yang terkait dengan penulisan layanan API sehingga Anda dapat fokus pada penulisan logika bisnis.
Jantung SlimHTTP adalah tipe titik akhir. Semua titik akhir Anda mulai sekarang akan mengambil bentuk tanda tangan fungsi di bawah ini.
type Endpoint func(*http.Request) (interface{}, error)
Penggunaan http.handlerfunc adalah kekuatan pendorong di balik penulisan perpustakaan ini. Memuaskan tipe http.handlerfunc (termasuk semua pengkodean dan pemeriksaan kesalahan dalam fungsi yang sama) bukanlah sesuatu yang saya adalah penggemar dan dengan demikian muncul dengan tipe di atas untuk membuat segalanya sedikit lebih mudah. Menggunakan tipe titik akhir baru di atas sekarang memberi Anda kemampuan untuk menurunkan semua pengkodean dan penanganan kesalahan ke perpustakaan ini, membuat proses menerapkan logika bisnis sedikit lebih bersih.
Ini hanya awal untuk proyek ini. Saya mengerti itu sangat mendasar dan itu adalah intinya. Jika ada sesuatu yang benar -benar ingin Anda lihat diimplementasikan yang Anda gunakan secara normal dalam logika API Anda, saya ingin sekali mendengarnya! - Posting masalah atau permintaan pull.
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
}
Hak Cipta © 2022 S32X
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani perangkat lunak tanpa pembatasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan “sebagaimana adanya”, tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan tidak ada. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam PERANGKAT LUNAK.