Vì sao mình chọn Scribe?
- Giao diện đẹp, 1 trang là thấy hết, có code sample và nút “Try It Out”.
- Tự động hiểu validation, FormRequest, API Resource để gợi ý tham số và sample response.
- Xuất Postman collection và OpenAPI spec để import vào Postman/Insomnia.
- Tùy biến mạnh: UI, văn bản, thứ tự sections, chiến lược trích xuất dữ liệu.
Tài liệu chính thức rất rõ ràng để bắt đầu: Introduction, Getting started, Generating Docs, Customising features.
Bắt đầu: cài đặt nhanh
- Cài package (mình thường để dev):
composer require --dev knuckleswtf/scribe- Publish file cấu hình:
php artisan vendor:publish --provider="Knuckles\\\\Scribe\\\\ScribeServiceProvider" --tag=scribe-configSau bước này, bạn sẽ có config/scribe.php để chỉnh toàn bộ hành vi và giao diện docs.
Chọn kiểu build docs: static hay laravel?
Trong config/scribe.php, đặt key type:
static: build rapublic/docs/index.html+ assets, không qua middleware.laravel: render bằng Blade, có thể gắn auth/middleware, URL do bạn định nghĩa.
Gợi ý nhanh:
- Docs nội bộ hoặc cần auth →
laravel. - Public docs đơn giản, dễ deploy ở bất kỳ đâu →
static.
Chọn routes sẽ được đưa vào docs
Cũng trong scribe.php, phần routes:
match.prefixesthường đểapi/*nếu API của bạn theo convention.includevàexcludeđể thêm/bớt cụ thể endpoint.
Ví dụ rút gọn:
'routes' => [[ 'match' => [ 'domains' => ['*'], 'prefixes' => ['api/*'], 'versions' => ['v1'], ], 'include' => [ // 'users.index', 'healthcheck*' ], 'exclude' => [ // '/health', 'admin.*' ],
]],Thêm “gia vị” ngay trong code: annotations cho Scribe
Scribe “đọc” controller/route handler để suy luận thông tin. Bạn có thể annotate để docs “có hồn” hơn: tiêu đề, mô tả, ví dụ response, giải thích field…
Ví dụ “healthcheck”:
/** * Healthcheck * * Check that the service is up. If everything is okay, you'll get a 200 OK response. * * @response 400 scenario="Service is unhealthy" {"status":"down","services":{"database":"up","redis":"down"}} * @responseField status The status of this API (`up` or `down`). * @responseField services Map of each downstream service and their status (`up` or `down`). */
Route::get('/healthcheck', function () { return ['status' => 'up', 'services' => ['database' => 'up', 'redis' => 'up']];
});Tuỳ biến phần “giới thiệu API”
Trong config/scribe.php, bạn có thể đặt:
title: tên hiển thị trên docs, đồng thời dùng cho Postman/OpenAPI.descriptionvàintro_text: đoạn giới thiệu API.base_url: URL hiển thị trong docs.- Thông tin authentication: header, token demo…
Bật “Try It Out” để test ngay trong trình duyệt
try_it_out.enabled = truetry_it_out.base_url: trỏ tới URL staging/local bạn muốn test.- Nếu API dùng Sanctum/SPAs: bật
try_it_out.use_csrf = trueđể tự lấy cookie và đính kèmX-XSRF-TOKEN.
Nhớ bật CORS cho API để “Try It Out” chạy trơn tru.
Xuất Postman collection và OpenAPI
Bật trong scribe.php:
'postman' => ['enabled' => true, 'overrides' => [ // 'info.version' => '2.0.0',
]],
'openapi' => ['enabled' => true, 'overrides' => [ // 'info.version' => '2.0.0',
]],Sau khi generate, menu docs sẽ có link tải về cho team import vào Postman/Insomnia.
Generate tài liệu: “bấm nút” là có
Chạy:
php artisan scribe:generatestatic: HTML + assets ởpublic/docs.laravel: Blade ởresources/views/scribe/index.blade.php.- Postman collection + OpenAPI spec nằm ở
/content/images/app/scribe/. - Scribe tạo thư mục
.scribechứa data trung gian để bạn chỉnh tay nếu cần.
Mẹo: có thể dùng --env để load .env.docs, ví dụ tắt notification khi Scribe gọi endpoint để lấy sample response.
Demo và cảm nhận nhanh
- Giao diện “đã mắt”, code sample rõ ràng, sidebar mạch lạc.
- Áp dụng thực tế: dev đỡ hỏi “endpoint X cần header gì”, PM/QA test nhanh, khách hàng thấy chuyên nghiệp hơn hẳn.
Checklist “xong là ship”
- [ ] Cài và publish config
- [ ] Chọn type static/laravel
- [ ] Cấu hình routes đúng phạm vi API
- [ ] Viết mô tả tổng quan, auth, base_url trong scribe.php
- [ ] Thêm annotations cho endpoint quan trọng
- [ ] Bật Try It Out + CORS
- [ ] Bật Postman + OpenAPI
- [ ]
php artisan scribe:generate - [ ] Commit
.scribenếu muốn kiểm soát nội dung docs - [ ] Deploy docs và chia sẻ link cho team
Troubleshooting nhanh
- Try It Out báo lỗi CORS → kiểm tra CORS middleware.
- Không thấy endpoint → soát
match.prefixeshoặcinclude/exclude. - Postman/OpenAPI không update → đảm bảo
enabled = true, clear cache trước khi kiểm tra lại. - Dùng Sanctum mà thử không chạy → bật
use_csrfvà đặtcsrf_urlđúng.