SLIMHTTP เป็นไลบรารี API ง่าย ๆ ที่ใช้สำหรับการเขียนบริการ JSON/XML อย่างรวดเร็วและง่ายดาย มันถูกเขียนขึ้นโดยมีจุดประสงค์ในการให้คำจำกัดความของบริการเช่นคำจำกัดความบริการ (slimhttp.endpoint) ในขณะที่หลีกเลี่ยงลอจิก RPC พิเศษทั้งหมดและอินเทอร์เฟซตัวเข้ารหัส/ตัวถอดรหัส วัตถุประสงค์ของโครงการนี้คือการใช้งานหม้อต้มขั้นพื้นฐานจำนวนมากที่เกี่ยวข้องกับการเขียน API Services เพื่อให้คุณสามารถมุ่งเน้นไปที่การเขียนตรรกะทางธุรกิจ
หัวใจของ 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
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง (“ ซอฟต์แวร์”) เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้“ ตามสภาพ” โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันความสามารถในการค้าการออกกำลังกายเพื่อวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.