0Pricing
R Academy · Lektion

GET- und POST-Endpunkte erstellen

Verarbeiten Sie Pfadparameter, Query-Strings und Request-Bodies

GET- und POST-Endpunkte erstellen ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Plumber?

plumber verwandelt gewöhnliche R-Funktionen mithilfe spezieller Kommentar-Annotations in HTTP-API-Endpunkte. Annotieren Sie eine Funktion mit #* @get /path, erstellt Plumber eine GET-Route, die diese Funktion aufruft und ihr Ergebnis als JSON zurückgibt.

Installieren Sie das Paket mit install.packages('plumber').

Ihr erster GET-Endpunkt

Eine einfache Plumber-API befindet sich in einer Datei (z. B. api.R). Annotieren Sie die Funktion mit #* @get, gefolgt vom Pfad. Plumber serialisiert den Rückgabewert der Funktion automatisch in JSON.

# api.R
# library(plumber)
#
# #* Return a greeting
# #* @get /hello
# function() {
#   list(message = 'Hello from Plumber!')
# }
#
# Start with:
# pr <- plumb('api.R')
# pr$run(port = 8000)

Pfadparameter mit Typangaben

Binden Sie variable Pfadsegmente mithilfe der Syntax mit spitzen Klammern ein: /users/<id:int>. Plumber analysiert das Segment und übergibt es als typisiertes Argument an Ihre Funktion. Zu den unterstützten Typen gehören int, dbl und chr.

# #* Get a user by ID
# #* @get /users/<id:int>
# function(id) {
#   # id is already an integer
#   list(
#     user_id = id,
#     name    = paste('User', id)
#   )
# }
#
# GET /users/42  =>  {"user_id":42, "name":"User 42"}

Query-Parameter mit #* @param

Dokumentieren Sie Query-Parameter mit #* @param name Description. Der Parametername muss mit dem Namen des Funktionsarguments übereinstimmen. Plumber liest ihn automatisch aus dem Query-String – eine manuelle Analyse ist nicht erforderlich.

# #* Search users by name
# #* @param name The name to search for
# #* @param limit Maximum results to return
# #* @get /users/search
# function(name = '', limit = '10') {
#   limit <- as.integer(limit)
#   # query string: /users/search?name=Alice&limit=5
#   list(query = name, max = limit)
# }

Einen POST-Endpunkt erstellen

Verwenden Sie #* @post /path für Endpunkte, die einen Anfrageinhalt empfangen. Das spezielle Argument req ermöglicht den Zugriff auf das ursprüngliche Anfrageobjekt. Plumber übergibt es automatisch, wenn das Funktionsargument req heißt.

# #* Create a new user
# #* @post /users
# function(req) {
#   body <- jsonlite::fromJSON(req$postBody)
#   # body$name, body$email are now available
#   list(
#     status  = 'created',
#     user_id = sample(1000:9999, 1),
#     name    = body$name
#   )
# }

Den Anfrageinhalt analysieren

req$postBody enthält die rohe JSON-Zeichenkette aus dem POST-Inhalt. Analysieren Sie sie mit jsonlite::fromJSON(req$postBody), um eine benannte R-Liste zu erhalten. Validieren Sie vor der Verarbeitung immer die erforderlichen Felder.

# #* @post /orders
# function(req, res) {
#   body <- jsonlite::fromJSON(req$postBody)
#   if (is.null(body$product_id)) {
#     res$status <- 400L
#     return(list(error = 'product_id is required'))
#   }
#   list(
#     order_id   = as.integer(Sys.time()),
#     product_id = body$product_id,
#     quantity   = body$quantity %||% 1
#   )
# }

HTTP-Statuscodes mit res$status

Mit dem Argument res (das Plumber ebenfalls automatisch einfügt) können Sie den HTTP-Statuscode der Antwort festlegen. Setzen Sie ihn vor der Rückgabe: res$status <- 404L. Häufige Codes:

  • 200 – OK (Standard)
  • 201 – Erstellt
  • 400 – Ungültige Anfrage
  • 404 – Nicht gefunden
  • 500 – Interner Serverfehler
# #* @get /items/<id:int>
# function(id, res) {
#   items <- list(
#     list(id=1, name='Widget'),
#     list(id=2, name='Gadget')
#   )
#   found <- Filter(function(x) x$id == id, items)
#   if (length(found) == 0) {
#     res$status <- 404L
#     return(list(error = paste('Item', id, 'not found')))
#   }
#   found[[1]]
# }

Benannte Listen als JSON zurückgeben

Plumber serialisiert R-Rückgabewerte mit jsonlite in JSON. Benannte Listen werden zu JSON-Objekten, unbenannte Listen zu JSON-Arrays. Geben Sie für strukturierte Antworten eine benannte Liste zurück.

# Named list => JSON object
# list(id=1, name='Alice')  => {"id":1, "name":"Alice"}
#
# Unnamed list => JSON array
# list(1, 2, 3)  =>  [1, 2, 3]
#
# Nested structures work too:
# list(
#   user   = list(id=1, name='Alice'),
#   orders = list(list(id=101), list(id=102))
# )
# => {"user":{"id":1,"name":"Alice"}, "orders":[{"id":101},{"id":102}]}

Das Plumber-Router-Objekt

Laden Sie eine annotierte R-Datei mit plumb('api.R'), um ein Plumber-router-Objekt zu erstellen. Rufen Sie pr$run(port = 8000) auf, um den Server zu starten. In der Produktion rufen Sie typischerweise pr_run(pr, host='0.0.0.0', port=8000) auf.

# Standard plumber startup in api_start.R:
# library(plumber)
# pr <- plumb('api.R')
# pr$run(port = 8000, host = '0.0.0.0')
#
# Or with pipe style:
# plumb('api.R') |> pr_run(port = 8000)
#
# Test with:
# curl http://localhost:8000/hello

Mehrere HTTP-Methoden verarbeiten

Ein einzelner Pfad kann mehrere Methoden unterstützen, indem Sie separate annotierte Funktionen schreiben. Plumber leitet Anfragen anhand der verwendeten HTTP-Methode an die richtige Funktion weiter.

# #* List all products
# #* @get /products
# function() {
#   list(products = list(list(id=1, name='Widget')))
# }
#
# #* Create a product
# #* @post /products
# function(req) {
#   body <- jsonlite::fromJSON(req$postBody)
#   list(created = TRUE, name = body$name)
# }

API-Endpunkte testen

Verwenden Sie curl im Terminal oder httr2 in R, um Endpunkte zu testen, während der Server läuft. Mit httr2 können Sie reproduzierbare Tests zusammen mit Ihrem API-Code schreiben.

# From terminal:
# curl http://localhost:8000/users/42
# curl -X POST http://localhost:8000/users \
#      -H 'Content-Type: application/json' \
#      -d '{"name":"Alice","email":"alice@example.com"}'
#
# From R:
# library(httr2)
# resp <- request('http://localhost:8000/users/42') |> req_perform()
# resp_body_json(resp)

Schnelltest: Pfadparameter

Wie deklarieren Sie einen Pfadparameter namens id, den Plumber als Ganzzahl einlesen soll?

Zusammenfassung: GET- und POST-Endpunkte

REST-Endpunkte mit Plumber erstellen:

  • #* @get /path erstellt eine GET-Route; #* @post /path erstellt eine POST-Route
  • Pfadparameter verwenden die Syntax <name:type> (int, dbl, chr)
  • Query-Parameter werden automatisch in passende Funktionsargumente eingelesen
  • Der POST-Body ist über jsonlite::fromJSON(req$postBody) verfügbar
  • Setzen Sie res$status für HTTP-Antworten mit einem anderen Status als 200
  • Geben Sie benannte Listen zurück – sie werden automatisch in JSON-Objekte serialisiert

Häufig gestellte Fragen

Ist die Lektion „GET- und POST-Endpunkte erstellen“ kostenlos?

Ja — der vollständige Text von „GET- und POST-Endpunkte erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „GET- und POST-Endpunkte erstellen“?

Verarbeiten Sie Pfadparameter, Query-Strings und Request-Bodies Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um R Academy zu starten?

Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „GET- und POST-Endpunkte erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?

Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einführung in Plumber und REST
  2. GET- und POST-Endpunkte erstellen
  3. Authentifizierung und API-Sicherheit
  4. Plumber-APIs in der Produktion bereitstellen
← Zurück zu R Academy