Slimhttp هي مكتبة API بسيطة تستخدم لكتابة خدمات JSON/XML بسرعة وسهولة. تمت كتابته بهدف توفير تعريف خدمة مثل GO-kit (slimhttp.endpoint) مع تجنب جميع واجهات منطق RPC الإضافية والتشفير/وحدة فك الترميز. الغرض من هذا المشروع هو تنفيذ الكثير من ملهى Boilerplate الأساسي المرتبط بكتابة خدمات 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
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام ، نسخ ، تعديل ، دمج أو نشر نسخ وتوزيعها و/أو بيعها و/أو بيع نسخ من البرامج ، والسماح للأشخاص الذين يتم تقديم البرنامج لهم للقيام بذلك ، مع مراعاة الشروط التالية:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجارات. لا يجوز بأي حال من الأحوال أن يتحمل المؤلفون أو حاملي حقوق الطبع والنشر مسؤولية أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو أضرار أو غير ذلك ، ناشئة عن البرامج أو خارجها أو الاستخدام أو غيرها برمجة.