Request & Response
Penjelasan
Setiap route handler di Vapor menerima parameter Request (biasa ditulis req) yang membawa semua informasi permintaan masuk: header, query string, path parameter, body, bahkan koneksi database lewat req.db. Handler bisa mengembalikan berbagai tipe yang conform ke ResponseEncodable — String, struct Codable, atau eksplisit objek Response. Untuk kontrol penuh atas response (status code kustom, header tambahan, body mentah), kamu bisa membuat Response secara manual: Response(status: .ok, body: .init(string: "...")). Query string diakses lewat req.query, misalnya req.query[String.self, at: "cari"] untuk membaca ?cari=nilai dari URL.
Contoh Konsep
import Vapor
func routes(_ app: Application) throws {
app.get("cari") { req -> String in
let kataKunci = req.query[String.self, at: "q"] ?? "(kosong)"
return "Mencari: \(kataKunci)"
}
app.get("status-kustom") { req -> Response in
let response = Response(status: .accepted)
response.body = .init(string: "Diterima dan sedang diproses")
return response
}
}
Praktikum
Buat route app.get("halo-query") yang membaca query parameter "nama" (default "Tamu" kalau tidak ada) dan mengembalikan String "Halo, <nama>".
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Untuk sebagian besar kasus, kamu tidak perlu membuat Response manual — cukup return struct Codable dan Vapor otomatis mengonversinya jadi JSON dengan status 200. Response manual baru dibutuhkan saat butuh status code atau header non-standar.