httr2 ile HTTP İstekleri Gönderme
GET ve POST istekleri gönderin, üstbilgileri yönetin ve yanıtları işleyin.
httr2 ile HTTP İstekleri Gönderme, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
httr2'ye Giriş
httr2, httr'ın yerini alan, HTTP istekleri için kullanılan modern R paketidir. Hat tabanlı bir oluşturucu örüntüsü kullanır: request(url) ile başlayın, değiştiriciler ekleyin, ardından req_perform() ile çalıştırın.
library(httr2)
# Basic GET request pattern:
# request(url) -> create request object
# |> req_*() -> modify request
# |> req_perform() -> send request
# |> resp_*() -> extract from response
# Minimal example (requires internet):
# resp <- request('https://httpbin.org/get') |>
# req_perform()
# resp_status(resp) # 200
# resp_body_json(resp) # parsed JSON body
cat('httr2 follows: build -> perform -> extract')request() ve req_perform()
request(url) bir istek nesnesi oluşturur. req_perform() bu isteği çalıştırır ve bir yanıt nesnesi döndürür. Ardından yanıt, resp_* işlevleriyle incelenebilir.
library(httr2)
# Build and send a GET request
# resp <- request('https://httpbin.org/get') |>
# req_perform()
# Inspect response
# resp_status(resp) # 200
# resp_status_desc(resp) # 'OK'
# resp_headers(resp) # list of headers
# resp_header(resp, 'content-type') # single header
# resp_body_string(resp) # raw body as string
# resp_body_json(resp) # parsed JSON
# resp_body_raw(resp) # raw bytes
cat('Response hierarchy:')
cat('status -> headers -> body')req_headers(): Özel Üst Bilgiler
req_headers(), HTTP üst bilgileri ekler veya mevcut üst bilgilerin üzerine yazar. Kimlik doğrulama belirteçleri, içerik türü belirtimi, API sürümü üst bilgileri ve özel istek üst verileri için kullanılır.
library(httr2)
# Add custom headers
# resp <- request('https://api.example.com/data') |>
# req_headers(
# 'Authorization' = 'Bearer my_token',
# 'X-API-Version' = '2',
# 'Accept' = 'application/json'
# ) |>
# req_perform()
# Common headers:
# 'Content-Type' = 'application/json' for POST with JSON body
# 'Accept' = 'application/json' to request JSON response
# 'User-Agent' = 'MyApp/1.0' for polite identification
# 'X-API-Key' = key for key-based auth
cat('req_headers() sets HTTP request headers')req_url_query(): Sorgu Parametreleri
req_url_query(), sorgu parametrelerini güvenli bir şekilde URL'ye ekler (özel karakterleri kodlar). Dizeleri paste0() ile elle birleştirmekten daha temiz bir yaklaşımdır.
library(httr2)
# Add query parameters
# resp <- request('https://api.example.com/search') |>
# req_url_query(
# q = 'R programming',
# page = 1,
# size = 20,
# sort = 'relevance'
# ) |>
# req_perform()
# Resulting URL:
# https://api.example.com/search?q=R+programming&page=1&size=20&sort=relevance
# Inspect the URL without performing:
req <- request('https://api.example.com/search') |>
req_url_query(q = 'hello world', page = 2)
req$url
# 'https://api.example.com/search?q=hello+world&page=2'req_body_json() ile POST İstekleri
req_body_json() ile bir POST isteğinde JSON verileri gönderin. Bu işlev, Content-Type: application/json üst bilgisini otomatik olarak ayarlar ve R listesini JSON'a serileştirir.
library(httr2)
# POST request with JSON body
# resp <- request('https://api.example.com/users') |>
# req_method('POST') |>
# req_body_json(list(
# name = 'Alice',
# email = 'alice@example.com',
# role = 'admin'
# )) |>
# req_perform()
# resp_status(resp) # 201 Created (if success)
# resp_body_json(resp) # returned user object
# Other body methods:
# req_body_form(...) -> application/x-www-form-urlencoded
# req_body_raw(bytes) -> raw bytes
# req_body_file(path) -> file upload
cat('req_body_json() handles Content-Type automatically')resp_body_json(): Yanıtı Ayrıştırma
resp_body_json(), yanıt gövdesini JSON olarak ayrıştırıp bir R listesine dönüştürür. JSON dizilerini R vektörlerine, nesneleri ise adlandırılmış listelere otomatik olarak dönüştürmek için simplifyVector=TRUE (varsayılan) kullanın.
library(httr2)
library(jsonlite)
# Simulated API response handling
# resp <- request('https://api.github.com/users/hadley') |>
# req_perform()
# user <- resp_body_json(resp)
# user$name # 'Hadley Wickham'
# user$public_repos # number of repos
# user$followers # follower count
# For arrays (simplifyVector=TRUE converts to data frame):
# resp <- request('https://api.github.com/users/hadley/repos') |>
# req_perform()
# repos <- resp_body_json(resp, simplifyVector = TRUE)
# repos$name # vector of repo names
cat('resp_body_json() with simplifyVector=TRUE -> data frame')resp_status() ve Hataları İşleme
resp_check_status(), 4xx/5xx yanıtlarında otomatik olarak hata oluşturur. Bu işlev olmadan httr2, hatalı durum kodlarında hata oluşturmaz — durumu açıkça denetlemeniz veya resp_check_status() çağırmanız gerekir.
library(httr2)
# Pattern: check status after perform
# resp <- request('https://api.example.com/data') |>
# req_perform() |>
# resp_check_status() # errors on 4xx/5xx
# Manual status checks:
# status <- resp_status(resp)
# if (status == 200) { ... }
# if (status == 404) { stop('Not found') }
# if (status == 401) { stop('Unauthorized') }
# if (status == 429) { Sys.sleep(60); retry() }
# HTTP status codes:
# 200 OK, 201 Created, 204 No Content
# 400 Bad Request, 401 Unauthorized, 403 Forbidden
# 404 Not Found, 429 Rate Limited
# 500 Server Error, 503 Service Unavailable
cat('Always check response status codes')req_retry(): Otomatik Yeniden Denemeler
req_retry(), başarısız istekleri otomatik olarak yeniden dener. max_tries değerini ve isteğe bağlı olarak yeniden denenebilir hataları (429 veya 503 gibi) belirleyen bir işlev olan is_transient değerini belirtin. Güçlü API istemcileri için vazgeçilmezdir.
library(httr2)
# Automatic retry with exponential backoff
# resp <- request('https://api.example.com/data') |>
# req_retry(
# max_tries = 3,
# is_transient = function(resp) {
# resp_status(resp) %in% c(429, 500, 503)
# },
# backoff = ~ 2^.x # exponential: 2, 4, 8 seconds
# ) |>
# req_perform()
# Default retry behavior:
# - Retries on 429 Too Many Requests automatically
# - Uses Retry-After header if present
# - max_tries = 1 by default (no retry)
# Simple retry:
# req_retry(max_tries = 3) # retry up to 3 times total
cat('req_retry() adds resilience to API calls')req_throttle(): İstek Hızını Sınırlama
req_throttle(rate), izin verilen en yüksek istek hızını aşmamanızı sağlar. rate = n/period değerini (örneğin, dakikada 10 istek) iletin. httr2, gerektiğinde istekler arasında otomatik olarak bekler.
library(httr2)
# Throttle to at most 10 requests per minute
# urls <- paste0('https://api.example.com/items/', 1:50)
# resps <- lapply(urls, function(url) {
# request(url) |>
# req_throttle(rate = 10 / 60) |> # 10/min
# req_perform()
# })
# Alternative: use req_perform_parallel() for parallel
# with throttle built in:
# reqs <- lapply(urls, \(u) request(u))
# resps <- req_perform_parallel(
# reqs,
# on_error = 'continue', # skip failures
# progress = TRUE
# )
cat('req_throttle(rate = 10/60) = 10 req/min')Kimlik Doğrulama Yardımcıları
httr2, yerleşik kimlik doğrulama yardımcıları sağlar: Temel kimlik doğrulama için req_auth_basic(user, pass), Bearer belirteçleri için req_auth_bearer_token(token) ve OAuth akışları için req_oauth_*().
library(httr2)
# Bearer token (most common for modern APIs)
# resp <- request('https://api.example.com/data') |>
# req_auth_bearer_token('my_api_token_here') |>
# req_perform()
# Basic authentication
# resp <- request('https://api.example.com/data') |>
# req_auth_basic('username', 'password') |>
# req_perform()
# Store tokens securely in environment variables
# token <- Sys.getenv('MY_API_TOKEN')
# resp <- request('https://api.example.com') |>
# req_auth_bearer_token(token) |>
# req_perform()
cat('Never hardcode tokens in scripts!')
cat('Use Sys.getenv() or the keyring package')req_dry_run() ile Deneme Çalıştırması
req_dry_run(), isteği gerçekten göndermeden ne gönderileceğini (yöntem, URL, üst bilgiler, gövde) tam olarak gösterir. Gerçek bir API'ye göndermeden önce karmaşık isteklerde hata ayıklamak için vazgeçilmezdir.
library(httr2)
# Inspect the request without sending it
req <- request('https://api.example.com/users') |>
req_method('POST') |>
req_headers(
'X-API-Version' = '2',
'Accept' = 'application/json'
) |>
req_auth_bearer_token('my_token') |>
req_body_json(list(name = 'Alice', role = 'admin')) |>
req_url_query(notify = 'true')
# Show request details without sending
req_dry_run(req)
# POST /users?notify=true HTTP/1.1
# Host: api.example.com
# Authorization: Bearer my_token
# Content-Type: application/json
# ...Hızlı Kontrol
httr2'nin istek oluşturma örüntüsünü anlayışınızı sınayın.
Özet: httr2 ile HTTP İstekleri
Temel çıkarımlar: httr2, hat tabanlı bir oluşturucu kullanır: request(url) |> req_*() |> req_perform(). req_headers() ile üst bilgiler, req_url_query() ile sorgu parametreleri, req_body_json() ile JSON gövdesi ekleyin. req_auth_bearer_token() ile kimlik doğrulaması yapın. Durumu her zaman resp_check_status() ile denetleyin. req_retry() ile dayanıklılık ekleyin ve req_throttle() ile hızı sınırlayın. req_dry_run() ile hata ayıklayın.
library(httr2)
# Complete httr2 request pattern:
# resp <- request('https://api.example.com/endpoint') |>
# req_headers('Accept' = 'application/json') |>
# req_url_query(param1 = 'value', page = 1) |>
# req_auth_bearer_token(Sys.getenv('API_TOKEN')) |>
# req_retry(max_tries = 3) |>
# req_throttle(rate = 10/60) |>
# req_perform() |>
# resp_check_status()
# Extract data:
# data <- resp_body_json(resp, simplifyVector = TRUE)
cat('build -> authenticate -> perform -> check -> extract')Sıkça Sorulan Sorular
“httr2 ile HTTP İstekleri Gönderme” dersi ücretsiz mi?
Evet — “httr2 ile HTTP İstekleri Gönderme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“httr2 ile HTTP İstekleri Gönderme” dersinde ne öğreneceğim?
GET ve POST istekleri gönderin, üstbilgileri yönetin ve yanıtları işleyin. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“httr2 ile HTTP İstekleri Gönderme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- jsonlite ile JSON Ayrıştırma
- httr2 ile HTTP İstekleri Gönderme
- R'de REST API'lerini Kullanma
- İç İçe JSON Yapılarını İşleme