Jadual Kandungan
1. Sediakan pelayan HTTP asas
2. Reka bentuk pengendali tenang
Contoh: Dapatkan semua pengguna
Contoh: Buat pengguna baru
Contoh: Dapatkan pengguna dengan ID
3. Tambah middleware untuk logik biasa
Middleware pembalakan
Ralat Pemulihan Middleware
4. Mengendalikan kesilapan dengan anggun
5. Susun kod untuk berskala
Nota akhir
Rumah pembangunan bahagian belakang Golang Cara Membina API RESTful tanpa Rangka Kerja di Golang

Cara Membina API RESTful tanpa Rangka Kerja di Golang

Aug 20, 2025 am 01:47 AM
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,

Cara Membina API RESTful tanpa Rangka Kerja di Golang

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 menyemak r.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 ke w .

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 - Gunakan http.Error atau biarkan ServeMux 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/ atau types/ 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 atau pgx 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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah penanda aras di Golang? Apakah penanda aras di Golang? Aug 13, 2025 am 12:14 AM

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

Bagaimana anda melaksanakan corak pemerhati di Golang? Bagaimana anda melaksanakan corak pemerhati di Golang? Aug 14, 2025 pm 12:04 PM

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.

Cara Mengurus Peruntukan Memori di Golang Cara Mengurus Peruntukan Memori di Golang Aug 11, 2025 pm 12:23 PM

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

Bagaimana menanamkan aset statik dalam binari golang Bagaimana menanamkan aset statik dalam binari golang Aug 30, 2025 am 04:50 AM

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.

Cara Menggunakan GRPC untuk Komunikasi antara Microservices di Golang Cara Menggunakan GRPC untuk Komunikasi antara Microservices di Golang Aug 12, 2025 am 03:49 AM

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

Cara Membina API RESTful tanpa Rangka Kerja di Golang Cara Membina API RESTful tanpa Rangka Kerja di Golang Aug 20, 2025 am 01:47 AM

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.

Apakah cara yang berbeza untuk memformat rentetan di Golang? Apakah cara yang berbeza untuk memformat rentetan di Golang? Aug 23, 2025 pm 01:25 PM

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.

Cara Menukar Jenis Data di Golang Cara Menukar Jenis Data di Golang Aug 19, 2025 pm 02:43 PM

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.

See all articles