Catatan
Pada 22 Februari 2023 Vercel secara resmi menawarkan pekerjaan cron bawaan untuk memicu fungsi tanpa server dan tepi Anda. Baca dokumentasi untuk mempelajari lebih lanjut. Perlu diingat bahwa fitur ini hanya gratis selama fase beta, itu akan menjadi fitur berbayar untuk ketersediaan umum, yang berarti bahwa rute tindakan GitHub akan tetap relevan untuk opsi gratis yang lengkap.
Pekerjaan Cron dengan tindakan github untuk aplikasi selanjutnya.js di Vercel ▲
Karena platform Vercel didorong oleh acara, maka tidak memelihara server yang sedang berjalan, Anda tidak dapat benar-benar menjadwalkan panggilan pada rute API Anda atau fungsi tanpa server di aplikasi Next.js Anda. Meskipun ada banyak layanan yang sudah ada sebelumnya yang menyediakan pekerjaan cron terjadwal, saya akhirnya memutuskan bahwa tindakan GitHub paling sesuai dengan kebutuhan saya, karena terintegrasi dengan baik dengan proyek apa pun yang sudah hidup di GitHub, ditambah sepenuhnya gratis.
Semua tindakan GitHub berada di direktori .github/workflows/ repositori Anda dan ditulis dalam YAML.
.github/workflows/starter.yaml adalah alur kerja paling dasar untuk membantu Anda memulai dengan tindakan.
Dengan acara yang dijadwalkan, Anda dapat menjalankan tugas pada interval yang ditentukan. Misalnya, alur kerja yang disediakan .github/workflows/scheduled.yaml menjalankan permintaan HTTP dengan curl setiap 60 menit.
name : Hourly cron job
on :
schedule :
- cron : ' */60 * * * * '
jobs :
cron :
runs-on : ubuntu-latest
steps :
- name : Hourly cron job
run : |
curl --request POST
--url 'https://example.com/api/task'
--header 'Authorization: Bearer ${{ secrets.ACTION_KEY }}'Jika Anda mengalami kesulitan menulis ekspresi jadwal cron, lihatlah Guru Crontab.
Rute API dan fungsi tanpa server memberikan solusi langsung untuk membangun API Anda dengan Next.js di Vercel. File apa pun di dalam pages/api dipetakan ke /api/* dan akan diperlakukan sebagai titik akhir API, bukan page .
Jika Anda menggunakan fungsi tanpa server, terlepas dari runtime, Anda perlu memasukkan file ke dalam /api/ direktori di root proyek Anda.
Untuk memicu rute API dengan aman dan fungsi tanpa server dengan tindakan GitHub, Anda perlu memberikan kunci otorisasi di header panggilan API Anda, yang, ketika dieksekusi, dibandingkan dengan kunci yang sesuai di aplikasi Next.js Anda.
Anda dapat mencapai ini dengan menambahkan rahasia terenkripsi ke repositori GitHub Anda dan meneruskannya dengan header permintaan HTTP Anda, seperti yang ditunjukkan pada cuplikan kode sebelumnya. Seiring dengan menambahkan kunci ke repositori GitHub Anda, Anda juga perlu mengaksesnya di dalam aplikasi Next.js Anda, lebih disukai melalui variabel lingkungan.
Contoh pages/api/example.js mengimplementasikan aliran otorisasi ini.
export default function handler ( req , res ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
} Gunakan pages/api/example.ts untuk TypeScript.
import type { NextApiRequest , NextApiResponse } from 'next'
export default function handler ( req : NextApiRequest , res : NextApiResponse ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
}