Menggunakan API Plumber dalam Pengeluaran
Jadikan API Plumber sebagai bekas dan gunakannya dengan Docker serta platform awan.
Menggunakan API Plumber dalam Pengeluaran ialah pelajaran R Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran R Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus R Academy merangkumi sejumlah 4 pelajaran.
Pilihan Pelaksanaan Produksi
API Plumber boleh dilaksanakan melalui beberapa cara:
- Bekas Docker — mudah alih, boleh diulang, berfungsi di mana-mana sahaja
- Posit Connect — pelaksanaan dengan satu klik serta penjadualan
- Digital Ocean / EC2 — VM Linux biasa yang menjalankan R
Docker ialah pilihan paling mudah alih dan piawaian industri untuk API R dalam produksi.
Titik Masuk API Plumber
Cipta api.R peringkat atas yang memulakan pelayan Plumber. Gunakan Sys.getenv('PORT', unset='8000') supaya port boleh ditetapkan oleh pengatur orkestrasi bekas tanpa mengubah kod.
# api.R
# library(plumber)
#
# pr <- plumb('routes.R')
# port <- as.integer(Sys.getenv('PORT', unset = '8000'))
# pr$run(host = '0.0.0.0', port = port)
#
# Listening on 0.0.0.0 is required inside Docker
# (127.0.0.1 is only reachable inside the container)Imej Docker Asas — rocker/r-ver
Imej rocker/r-ver menyediakan persekitaran R minimum dengan versi yang ditetapkan. Sentiasa tetapkan versi R tertentu (contohnya, rocker/r-ver:4.3.2) untuk memastikan binaan boleh diulang. Elakkan :latest dalam produksi.
# Dockerfile
# FROM rocker/r-ver:4.3.2
#
# Alternatively use rocker/plumber which pre-installs plumber:
# FROM rstudio/plumber:latest
#
# rocker/r-ver is more minimal and gives you full control
# over which packages are installed.Memasang Pakej R dalam Dockerfile
Gunakan RUN Rscript -e "install.packages(...)" untuk memasang pakej semasa binaan imej. Pasang kebergantungan sistem terlebih dahulu (contohnya, libssl-dev untuk httr2) menggunakan apt-get.
# FROM rocker/r-ver:4.3.2
#
# RUN apt-get update && apt-get install -y \
# libssl-dev \
# libcurl4-openssl-dev \
# && rm -rf /var/lib/apt/lists/*
#
# RUN Rscript -e "install.packages(c('plumber', 'jsonlite', 'httr2'), repos='https://cloud.r-project.org')"Menyalin Fail dan Menetapkan Port
Salin fail sumber R anda ke dalam bekas dengan COPY. Isytiharkan port dengan EXPOSE supaya Docker mengetahui port yang didengar oleh bekas. Ini hanyalah dokumentasi — arahan ini tidak menerbitkan port tersebut.
# FROM rocker/r-ver:4.3.2
# ...
# WORKDIR /app
# COPY routes.R .
# COPY api.R .
#
# EXPOSE 8000
#
# CMD ["Rscript", "api.R"]Membina dan Menjalankan Imej Docker
Bina imej dengan docker build, kemudian jalankan bekas dengan memetakan port hos kepada port bekas. Bendera -e memasukkan pemboleh ubah persekitaran untuk rahsia.
# Build the image:
# docker build -t my-r-api:1.0 .
#
# Run a container:
# docker run -d \
# -p 8000:8000 \
# -e API_SECRET_KEY='my_secret' \
# -e DATABASE_URL='postgres://...' \
# --name r-api \
# my-r-api:1.0
#
# Test:
# curl http://localhost:8000/pingMembaca Rahsia dengan Sys.getenv()
Dalam produksi, jangan sekali-kali meletakkan rahsia dalam Dockerfile atau kod sumber. Bacanya semasa pelaksanaan dengan Sys.getenv(). Hantarkan rahsia melalui bendera Docker -e, rahsia Kubernetes atau sistem pengurusan pemboleh ubah persekitaran seperti AWS Secrets Manager.
# In routes.R:
# db_url <- Sys.getenv('DATABASE_URL', unset = '')
# api_key <- Sys.getenv('API_SECRET_KEY', unset = '')
#
# if (nchar(db_url) == 0) stop('DATABASE_URL is required')
# if (nchar(api_key) == 0) stop('API_SECRET_KEY is required')
#
# Fail fast at startup rather than failing silently at request time
cat('Validate all required env vars at startup with stop()
')Titik Akhir Semakan Kesihatan
Titik akhir /ping atau /health membolehkan pengimbang beban dan pengatur orkestrasi (Kubernetes, ECS) mengesahkan bahawa API masih hidup. Titik akhir ini perlu memulangkan 200 dengan pantas tanpa pengesahan dan secara pilihan menyemak ketersambungan pangkalan data.
# #* Health check
# #* @preempt auth
# #* @get /ping
# function() {
# list(
# status = 'ok',
# version = '1.0.0',
# time = format(Sys.time(), '%Y-%m-%dT%H:%M:%SZ')
# )
# }
#
# Docker HEALTHCHECK:
# HEALTHCHECK CMD curl -f http://localhost:8000/ping || exit 1Contoh Dockerfile Lengkap
Menggabungkan semuanya — Dockerfile sedia produksi untuk API Plumber:
# FROM rocker/r-ver:4.3.2
# RUN apt-get update && apt-get install -y libssl-dev libcurl4-openssl-dev \
# && rm -rf /var/lib/apt/lists/*
# RUN Rscript -e "install.packages(c('plumber','jsonlite'), repos='https://cloud.r-project.org')"
# WORKDIR /app
# COPY routes.R api.R ./
# EXPOSE 8000
# HEALTHCHECK CMD curl -f http://localhost:8000/ping || exit 1
# CMD ["Rscript", "api.R"]Pengelogan dalam Produksi
Pengelogan berstruktur membantu mendiagnosis masalah dalam produksi. Gunakan cat() atau pakej logger untuk menulis log bertanda masa ke stdout — Docker dan kebanyakan platform menangkap stdout secara automatik lalu menyalurkannya kepada pengagregat log.
# Log format: ISO timestamp + level + message
log_info <- function(msg) {
cat(format(Sys.time(), '%Y-%m-%dT%H:%M:%S'), '[INFO]', msg, '
')
}
log_info('API starting up')
log_info(paste('Port:', Sys.getenv('PORT', '8000')))Proksi Songsang dengan Nginx
Dalam produksi, letakkan proksi songsang Nginx di hadapan Plumber untuk mengendalikan penamatan TLS, pembatasan kadar dan penimbalan permintaan. Nginx meneruskan permintaan kepada Plumber pada localhost, manakala dunia luar bersambung kepada Nginx pada port 443.
# Nginx config snippet (nginx.conf):
# server {
# listen 443 ssl;
# ssl_certificate /etc/letsencrypt/.../fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/.../privkey.pem;
#
# location /api/ {
# proxy_pass http://127.0.0.1:8000/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# }
# }Semakan Pantas: Docker EXPOSE
Apakah yang sebenarnya dilakukan oleh arahan EXPOSE 8000 dalam Dockerfile?
Ulang Kaji Pelaksanaan API Plumber
Langkah utama untuk pelaksanaan Plumber dalam produksi:
- Dengar pada
0.0.0.0dan bacaPORTdaripada persekitaran - Gunakan
rocker/r-ver:X.Y.Z(versi ditetapkan) sebagai imej asas - Pasang pakej dalam Dockerfile; salin fail sumber sahaja
- Masukkan rahsia melalui pemboleh ubah env
-e— jangan sekali-kali menyimpannya dalam sumber atau Dockerfile - Tambahkan titik akhir kesihatan
/ping(dengan#* @preempt auth) - Gunakan Nginx sebagai proksi songsang untuk TLS dan pembatasan kadar
Pelajari R dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 43
- Pelajaran
- 159
Soalan Lazim
Adakah pelajaran “Menggunakan API Plumber dalam Pengeluaran” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran R Academy, termasuk “Menggunakan API Plumber dalam Pengeluaran”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus R Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menggunakan API Plumber dalam Pengeluaran”?
Jadikan API Plumber sebagai bekas dan gunakannya dengan Docker serta platform awan. Anda berlatih R Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan R Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran R Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menggunakan API Plumber dalam Pengeluaran” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengenalan kepada Plumber dan REST
- Mencipta Titik Akhir GET dan POST
- Pengesahan dan Keselamatan API
- Menggunakan API Plumber dalam Pengeluaran