HTTP İstekleri ve JSON
REST API'lerine HTTP GET, POST, PUT ve DELETE istekleri göndermeyi ve JSON yanıtlarını Dart nesnelerine ayrıştırmayı öğrenin.
HTTP İstekleri ve JSON, CoddyKit'te ücretsiz bir Flutter Mobile Development 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, Flutter Mobile Development öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Flutter Mobile Development kursu toplamda 4 dersten oluşur.
Connect to the Web!
Modern mobil uygulamalar, veri almak ve göndermek için sürekli olarak internetle etkileşim kurar. Bu genellikle web servisleriyle iletişim kurmak için HTTP istekleri kullanılarak yapılır; bunlar aynı zamanda API'ler (Uygulama Programlama Arayüzleri) olarak bilinir.
API'ler, farklı yazılım sistemlerinin birbirleriyle konuşması için bir yol sağlar. Örneğin, bir hava durumu uygulaması en son tahmini almak için bir API kullanır.
Get the `http` Package
Flutter ve Dart'ta HTTP istekleri yapmanın en kolay yolu resmi http paketini kullanmaktır. İlk olarak, bunu projenizin pubspec.yaml dosyasına eklemeniz gerekir:
dependencies:
flutter:
sdk: flutter
http: ^1.2.0 # Add this lineMaking a GET Request
Paketi ekledikten sonra, Dart dosyanıza aktarın. En yaygın istek, bir sunucudan veri almak için kullanılan GET isteğidir. Genel bir API'den bazı sahte gönderi verilerini alalım:
import 'package:http/http.dart' as http;
import 'dart:convert'; // Needed for JSON
void main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
print('Response body: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}What is JSON?
Çoğu web API'si verileri JSON (JavaScript Object Notation) formatında döndürür. Verileri organize etmenin hafif ve insan tarafından okunabilir bir yoludur.
JSON verileri, Dart haritalarına benzer şekilde anahtar-değer çiftleri gibi görünür. Önceki GET isteğimizin döndürebileceği şey şudur:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere...",
"body": "quia et suscipit..."
}Parsing JSON to Dart
Dart'ta JSON verileriyle çalışmak için onu kod çözme (decode) işlemini yapmamız gerekir. Dart'ın dart:convert kütüphanesi, bir JSON dizesini bir Dart Map nesnesine dönüştüren jsonDecode() fonksiyonunu sağlar.
GET örneğimizi yanıtı ayrıştırmak (parse) için güncelleyelim:
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
var jsonBody = jsonDecode(response.body);
print('User ID: ${jsonBody['userId']}');
print('Title: ${jsonBody['title']}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}Structured Data with Models
Basit durumlar için Map kullanmak kabul edilebilir olsa da, JSON verileriniz için özel bir Dart model sınıfı oluşturmak daha iyi tür güvenliği ve kod okunabilirliği sağlar.
Yaygın bir yaklaşım, bir JSON haritası alan ve modelinizin bir örneğini oluşturan bir factory kurucusuna (constructor) sahip olmaktır.
class Post {
final int userId;
final int id;
final String title;
final String body;
Post({required this.userId, required this.id, required this.title, required this.body});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
userId: json['userId'] as int,
id: json['id'] as int,
title: json['title'] as String,
body: json['body'] as String,
);
}
}Fetching Data into a Model
Şimdi, bir gönderi getirmek ve bunu güçlü tipli bir Dart nesnesine dönüştürmek için GET isteğimizi, JSON kod çözme işlemimizi ve Post modelimizi birleştirelim. Bu, verilere erişimi çok daha güvenli ve net hale getirir!
import 'package:http/http.dart' as http;
import 'dart:convert';
class Post {
final int userId;
final int id;
final String title;
final String body;
Post({required this.userId, required this.id, required this.title, required this.body});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
userId: json['userId'] as int,
id: json['id'] as int,
title: json['title'] as String,
body: json['body'] as String,
);
}
}
void main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
var jsonBody = jsonDecode(response.body);
Post post = Post.fromJson(jsonBody);
print('Fetched Post ID: ${post.id}');
print('Post Title: ${post.title}');
} else {
print('Failed to load post: ${response.statusCode}.');
}
}Sending Data with POST
Sunucuya yeni veri göndermek için genellikle bir POST isteği kullanırsınız. Bu, genellikle JSON formatında bir istek gövdesi sağlamayı içerir. 'Content-Type' üstbilgisini (header) ayarlamayı unutmayın!
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
var response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'title': 'foo',
'body': 'bar',
'userId': '1',
}),
);
if (response.statusCode == 201) { // 201 Created
print('Created Post: ${response.body}');
} else {
print('Failed to create post: ${response.statusCode}.');
}
}Updating & Deleting Data
GET ve POST'un yanı sıra, PUT ve DELETE istekleriyle de karşılaşacaksınız:
- PUT: Sunucudaki mevcut bir kaynağı güncellemek için kullanılır. POST'a benzer şekilde, genellikle bir istek gövdesi içerir.
- DELETE: Sunucudan bir kaynağı kaldırmak için kullanılır. Genellikle bir istek gövdesi gerektirmez.
http paketi, sırasıyla http.post() ve http.get()'e benzer şekilde kullanılan http.put() ve http.delete() fonksiyonlarını sağlar.
Robust Request Handling
Ağ istekleri birçok nedenle başarısız olabilir (internet yok, sunucu kapalı, geçersiz veri). Her zaman bu senaryolara hazırlıklı olun:
- Ağ ile ilgili istisnalar (örn.
SocketException) içintry-catchkullanın. - Sunucunun yanıtını anlamak için (örn.
200 OK,404 Not Found,500 Server Error)response.statusCodedeğerini kontrol edin.
Bu, işler ters gittiğinde bile uygulamanızın kararlı kalmasını sağlar.
HTTP Request Check
Sunucuya yeni veri göndermek ve sunucudan mevcut verileri almak için sırasıyla tipik olarak hangi HTTP yöntemi (yöntemleri) kullanılır?
Recap: HTTP & JSON
Harika iş! HTTP istekleri yapmanın ve JSON verilerini işlemenin temellerini öğrendin:
httppaketi ağ çağrıları için esastır.- GET veri alır, POST yeni veri gönderir, PUT günceller ve DELETE veriyi siler.
- JSON, API verileri için standart bir biçimdir.
- Yanıtları
jsonDecodeile çözümlemek ve istek gövdelerinijsonEncodeile kodlamak içindart:convertkullan. - Dart model sınıfları, tür güvenliğini ve organizasyonu geliştirir.
Sonraki adımda, asenkron işlemlerde hataları daha sağlam bir şekilde yönetmenin detaylarına gireceksin!
Sıkça Sorulan Sorular
“HTTP İstekleri ve JSON” dersi ücretsiz mi?
Evet — “HTTP İstekleri ve JSON” 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 Flutter Mobile Development kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Flutter Mobile Development kursu toplamda 4 dersten oluşur.
“HTTP İstekleri ve JSON” dersinde ne öğreneceğim?
REST API'lerine HTTP GET, POST, PUT ve DELETE istekleri göndermeyi ve JSON yanıtlarını Dart nesnelerine ayrıştırmayı öğrenin. Flutter Mobile Development 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.
Flutter Mobile Development öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Flutter Mobile Development, 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.
“HTTP İstekleri ve JSON” 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 Flutter Mobile Development dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Flutter Mobile Development 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
- Future'lar ve Async/Await
- HTTP İstekleri ve JSON
- Async İçinde Hata İşleme
- Akışlar ve Tepkisel Veriler