Cara Membina API RESTful tanpa Rangka Kerja di Golang
Ya, dengan menggunakan Perpustakaan Standard Go, anda boleh membina API yang tenang, mengendalikan permintaan melalui NET/HTTP, pengekodan/json, dan konteks pengurusan konteks, digabungkan dengan HTTP.Servemux Routing, Resolusi Laluan Manual, Middleware Encapsulation dan Pengendalian Kesalahan yang Sesuai,
Membina API yang tenang di GO tanpa bergantung pada kerangka luaran seperti gin atau echo sepenuhnya boleh dilakukan -dan kadang -kadang lebih baik untuk pembelajaran, minimum, atau prestasi. Perpustakaan Standard Go menyediakan semua yang anda perlukan: net/http
untuk pengendalian permintaan dan tindak balas, encoding/json
untuk siri JSON, dan context
untuk nilai-nilai dan pembatalan permintaan.
Berikut adalah cara untuk membina API Restful yang mudah tetapi berfungsi hanya menggunakan perpustakaan standard.
1. Sediakan pelayan HTTP asas
Mulakan dengan membuat pelayan HTTP minimum menggunakan net/http
. Anda tidak memerlukan kerangka router -Go's http.ServeMux
boleh mengendalikan penghalaan asas.
Pakej utama import ( "Net/http" ) func main () { mux: = http.newservemux () // Tentukan laluan mux.handlefunc ("mendapatkan /pengguna", getUsers) mux.handlefunc ("pos /pengguna", createUser) mux.handlefunc ("get /users /{id}", getUserbyId) // Server Mula http.listenandserve (": 8080", mux) }
Nota: Ini menggunakan sintaks penghalaan hierarki GO 1.22 (
"GET /users"
), yang membolehkan pemadanan dengan kaedah HTTP. Jika anda berada di versi yang lebih lama, anda perlu menyemakr.Method
di dalam pengendali.
2. Reka bentuk pengendali tenang
Setiap pengendali harus menghuraikan input, melakukan logik, dan mengembalikan respons JSON.
Contoh: Dapatkan semua pengguna
taipkan struct pengguna { Id int `json:" id "` Nama String `Json:" Nama "` } var users = [] user { {Id: 1, nama: "Alice"}, {Id: 2, nama: "bob"}, } Func GetUsers (w http.responseWriter, r *http.request) { W.Header (). Set ("Kandungan-Jenis", "Aplikasi/JSON") json.newencoder (w) .encode (pengguna) }
- Tetapkan tajuk
Content-Type
. - Gunakan
json.NewEncoder
untuk menulis respons JSON terus kew
.
Contoh: Buat pengguna baru
Funce CreateUser (w http.ResponseWriter, r *http.request) { Pengguna var newuser jika err: = json.newDecoder (r.body) .decode (& newUser); err! = nil { http.error (W, "Invalid JSON", http.statusbadrequest) Kembali } // Berikan ID (kenaikan mudah) jika len (pengguna) == 0 { newuser.id = 1 } else { newuser.id = pengguna [len (pengguna) -1] .id 1 } Pengguna = Tambah (Pengguna, NewUser) W.Header (). Set ("Kandungan-Jenis", "Aplikasi/JSON") W.WriteHeader (http.StatusCreated) json.newencoder (w) .encode (NewUser) }
- Decode permintaan badan ke dalam struktur
User
. - Sahkan input (pemeriksaan asas di sini; berkembang seperti yang diperlukan).
- Pulangan
201 Created
dengan sumber baru.
Contoh: Dapatkan pengguna dengan ID
Import "Regexp" Import "STRCONV" Import "Strings" func getUserbyId (w http.ResponseWriter, r *http.request) { // Ekstrak jalan dan id parse Path: = r.url.path idstr: = strings.trimprefix (path, "/users/") // Pengesahan mudah jika idstr == "" { http.error (W, "ID Pengguna Hilang", http.statusbadrequest) Kembali } // Gunakan regex untuk memastikan ia angka dan tidak ada bahagian jalan tambahan jika! regexp.mustcompile (`^\ d $`) .matchstring (idstr) { http.error (W, "ID Pengguna Tidak Sah", http.statusbadrequest) Kembali } id, _: = strconv.atoi (idstr) untuk _, u: = pengguna julat { jika u.id == id { W.Header (). Set ("Kandungan-Jenis", "Aplikasi/JSON") json.newencoder (w) .encode (u) Kembali } } http.error (W, "Pengguna tidak dijumpai", http.StatusNotFound) }
GO's
ServeMux
tidak menyokong parameter URL yang dinamakan seperti/users/{id}
secara asli (di luar sintaks khusus kaedah), jadi anda perlu menghuraikan jalan secara manual atau menggunakan manipulasi rentetan.
Sebagai alternatif, gunakan corak seperti:
mux.handlefunc ("get /users /", getuserbyid) // slash trailing tidak diperlukan
Kemudian periksa sama ada laluan sepadan /users/<id>
di pengendali.
3. Tambah middleware untuk logik biasa
Anda boleh menulis middleware mudah tanpa rangka kerja.
Middleware pembalakan
Func LoggingMiddleWare (seterusnya http.handlerfunc) http.handlerfunc { kembali func (w http.responseWriter, r *http.request) { log.printf (" %s %s", r.method, r.url.path) Seterusnya (w, r) } }
Balut Pengendali:
mux.handlefunc ("mendapatkan /pengguna", loggingmiddleWare (getUsers))
Ralat Pemulihan Middleware
Funcule RecoverMiddleWare (seterusnya http.handlerfunc) http.handlerfunc { kembali func (w http.responseWriter, r *http.request) { menangguhkan func () { jika err: = pulih (); err! = nil { log.printf ("Panik: %v", err) http.error (W, "Ralat Pelayan Dalaman", http.StatusInnalserverError) } } () Seterusnya (w, r) } }
4. Mengendalikan kesilapan dengan anggun
Sentiasa Mengesahkan:
- Input JSON
- Parameter URL
- Kaedah permintaan
Mengembalikan kod status yang sesuai:
-
400 Bad Request
- input yang cacat -
404 Not Found
- sumber tidak wujud -
405 Method Not Allowed
- Gunakanhttp.Error
atau biarkanServeMux
mengendalikannya -
500 Internal Server Error
- Masalah yang tidak dijangka
Anda boleh membuat penolong:
Func WriteJson (w http.ResponseWriter, status int, antara muka data {}) { W.Header (). Set ("Kandungan-Jenis", "Aplikasi/JSON") W.WriteHeader (status) json.newencoder (w) .encode (data) }
Kemudian gunakan:
WriteJson (W, http.statusok, pengguna)
5. Susun kod untuk berskala
Walaupun tanpa rangka kerja, simpan perkara yang dapat dikekalkan:
- Letakkan pengendali dalam fail berasingan (contohnya,
handlers/user.go
) - Tentukan model dalam
models/
atautypes/
pakej - Gunakan
main.go
untuk penyediaan penghalaan dan pelayan - Pertimbangkan struktur konfigurasi untuk aplikasi aplikasi (misalnya, sambungan pangkalan data)
Struktur Contoh:
/API Main.go /pengendali user.go /model user.go /middleware Logging.go
Nota akhir
- Tidak ORM atau DB? Anda boleh menggunakan
database/sql
ataupgx
secara langsung. - Pengesahan? Tambah cek manual atau gunakan tag
validator
dengan refleksi (walaupun tanpa rangka kerja). - Ujian?
net/http/httptest
berfungsi dengan sempurna dengan pengendali standard.
Membina API REST tanpa rangka kerja mengajar anda bagaimana HTTP berfungsi pada tahap yang lebih mendalam dan menghasilkan kurang sihir dan kurang ketergantungan. Ia ringan, cepat, dan sepenuhnya di bawah kawalan anda.
Pada asasnya: Gunakan net/http
, Struktur pengendali anda, menghuraikan input dengan teliti, kembali JSON, dan tambah middleware dengan pembalut. Tiada kerangka kerja yang diperlukan.
Atas ialah kandungan terperinci Cara Membina API RESTful tanpa Rangka Kerja di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



GobenchmarkingmeasurescodeperformanceTimingFunctionExecutionandMemoryusage, usingbuilt-intestingtools; penanda arasarwritten_test.gofileswithnamesstartingwithbenchmark, takeatesting.bparameter, andruntargetcontrollrolledbybytrolledbytrolledbytrollrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolledbytrolled

Di mana sahaja, mod pemerhati boleh dilaksanakan melalui antara muka dan saluran, antara muka pemerhati boleh ditakrifkan, antara muka pemerhati termasuk kaedah kemas kini, struktur subjek mengekalkan senarai pemerhati dan saluran mesej, tambahkan pemerhati, maklumkan menghantar mesej, dan mencetuskan peristiwa, dan menyedari mekanisme pemberitahuan peristiwa yang longgar, yang sesuai untuk sistem yang didorong oleh peristiwa, pemberitahuan dan pemberitahuan mesej dan senario lain.

MemahamiMemoryAllocationModelByusingescapeanalysistominimizeapallocations; 2.reduceheapallocationswithvalueTypes, pra-allocatedslices, andsync.poolforbufferreuse; 3.optimizestringandbytehandlingusingstrings.BuilderByRySlaneLySheonlySheon

Menggunakan pakej embed Go, anda boleh membenamkan sumber statik terus ke dalam fail binari. Bermula dari GO1.16, dengan menggunakan // Go: Enderved arahan sebelum pembolehubah, satu fail, pelbagai fail atau keseluruhan direktori boleh dibenamkan, menyokong rentetan, [] byte atau embed.fs jenis. Kandungan tertanam dikuatkan ke dalam binari pada masa penyusunan. Laluan perlu wujud dan sensitif kes. Adalah disyorkan untuk menggunakan Embed dan bukannya alat pihak ketiga seperti Go-Bindata. Kaedah ini mudah dan cekap dan telah menjadi amalan standard.

Langkah -langkah untuk berkomunikasi antara GO microservices menggunakan GRPC adalah: 1. Gunakan protokolbuffers untuk menentukan antara muka perkhidmatan dan jenis mesej, dan menulis fail .proto; 2. Pasang pengkompil protok dan pergi pemalam untuk menjana salam. 3. Melaksanakan pelayan GRPC, daftar perkhidmatan dan dengar port yang ditentukan; 4. Buat pelanggan GRPC, buat sambungan dan panggil kaedah jauh; 5. Jalankan pelayan dan klien masing -masing untuk mengesahkan komunikasi; 6. Ikuti amalan terbaik, termasuk membolehkan TLS, menggunakan pemintas, pengendalian ralat dan kawalan versi; 7. Mengamalkan struktur projek yang jelas untuk penyelenggaraan dan kemas kini yang mudah. Langkah -langkah ini membolehkan kecekapan yang tinggi

Ya, dengan menggunakan Perpustakaan Standard Go, anda boleh membina API yang tenang, mengendalikan permintaan melalui NET/HTTP, pengekodan/json, dan konteks pengurusan konteks, digabungkan dengan HTTP.Servemux Routing, Resolusi Laluan Manual, Middleware Encapsulation dan Pengendalian Kesalahan yang Sesuai.

FMT.sprintf digunakan untuk memformat dan mengembalikan rentetan, sesuai untuk penyisipan dan penyimpanan yang berubah -ubah; 2.fmt.fprintf menulis hasil yang diformat secara langsung kepada io.writer, sesuai untuk penulisan fail atau rangkaian; 3.strings.join digunakan untuk menghubungkan irisan rentetan dengan cekap; 4. Pengendali sesuai untuk jahitan satu kali mudah; 5.Strings.Builder menyediakan prestasi tinggi apabila gelung atau jahitan berskala besar; 6. Pakej Templat sesuai untuk penjanaan teks dinamik yang kompleks berdasarkan data, seperti fail HTML atau konfigurasi. Kaedah yang sesuai harus dipilih berdasarkan prestasi, kebolehbacaan dan senario untuk berakhir dengan ayat lengkap.

Jenis penukaran dalam GO mesti dilakukan secara eksplisit dan tidak dapat secara tersirat. Untuk jenis angka, gunakan jenis sasaran sebagai fungsi untuk penukaran, seperti Int64 (a), tetapi perhatikan limpahan dan kehilangan ketepatan; Penukaran antara rentetan dan nombor memerlukan penggunaan fungsi seperti ATOI, Parseint, Parsefloat, Itoa dan Formatfloat dalam pakej STRCONV, dan mengendalikan kesilapan yang mungkin; Rentetan dan kepingan byte boleh ditukar secara langsung kepada satu sama lain melalui [] byte dan rentetan (b), yang sesuai untuk operasi I/O dan rangkaian; Penukaran jenis antara muka {} (atau mana -mana) bergantung pada jenis penegasan x. (Jenis) atau jenis suis untuk selamat mengekstrak jenis asal, mengelakkan penggunaan penukaran antara muka {} (atau mana -mana) jenis penegasan jenis bergantung x.
