
MySQL ve REST API ile PHP CRUD
CRUD, arka uç geliştirmedeki en önemli kavramlardan biridir. Açılımı Create, Read, Update ve Delete şeklindedir. Bu dört işlem hemen hemen her web uygulamasında verileri yönetmek için kullanılan temel eylemleri temsil eder.
CRUD, MySQL ve REST API ile birleştirildiğinde PHP, web sitelerinin, mobil uygulamaların, kontrol panellerinin ve ön uç çerçevelerinin HTTP istekleri aracılığıyla veritabanı kayıtlarıyla etkileşime girmesine olanak tanıyan arka uç hizmetleri oluşturmak için kullanılabilir.
Bu makalede, veritabanı yapısı, PDO bağlantısı, prepared statements, JSON yanıtları, HTTP yöntemleri, endpoint oluşturma, endpoint’i okuyun, endpoint’i güncelleyin, endpoint’i silin, doğrulama, hata işleme ve en iyi güvenlik uygulamaları.
CRUD Nedir?
CRUD, bir veritabanındaki verileri yönetmek için kullanılan dört ana işlemi açıklar. Çoğu uygulama CRUD'yu şu veya bu biçimde kullanır.
Oluştur:veritabanına yeni bir kayıt ekleyin.
Oku:Veritabanından bir veya daha fazla kaydın alınması.
Güncelleme:Mevcut bir kaydı değiştirin.
Sil:veritabanından bir kaydı kaldırmak.
Örneğin, bir blog uygulamasında CRUD gönderiler oluşturmak, gönderileri görüntülemek, gönderi içeriğini güncellemek ve gönderileri silmek için kullanılabilir. Bir e-ticaret sisteminde CRUD ürünleri, kategorileri, müşterileri ve siparişleri yönetebilir.
CRUD yönetici panelleriyle sınırlı değildir. Aynı zamanda APIs'nun, gösterge tablolarının, içerik yönetim sistemlerinin, kullanıcı profillerinin, görev yöneticilerinin ve birçok arka uç hizmetinin de temelini oluşturur.
REST API Nedir?
REST API anlamına gelirTemsili Durum Transferi Uygulama Programlama Arayüzü. Basit bir ifadeyle REST API, farklı uygulamaların HTTP isteklerini kullanarak iletişim kurmasına olanak tanır.
Bir ön uç uygulaması PHP API'ya istek gönderebilir ve PHP, verileri JSON olarak döndürebilir. Ön uç daha sonra dahili veritabanı yapısını bilmeye gerek kalmadan bu verileri görüntüleyebilir.
REST API genellikle eylemi tanımlamak için HTTP yöntemlerini kullanır:
GET:verileri al.
POST:yeni veriler oluşturun.
KOY:mevcut verileri tamamen güncelleyin.
YAMA:Mevcut verilerin bir kısmını güncelleyin.
DELETE:verileri silin.
Örneğin, bir API gönderisi aşağıdaki gibi rotaları kullanabilir:
GET /api/yazılarGönderileri listelemek için.
GET /api/yazılar/5Bir gönderiyi göstermek için.
POST /api/yazılarBir gönderi oluşturmak için.
PUT /api/posts/5Bir gönderiyi güncellemek için.
DELETE /api/yazılar/5Bir gönderiyi silmek için.
REST APIs genellikle JSON değerini döndürür çünkü JSON'nun okunması ve JavaScript, mobil uygulamalar ve diğer arka uç sistemleriyle kullanılması kolaydır.
CRUD için Veritabanı Tablosu
CRUD örneği oluşturmak için bir veritabanı tablosuna ihtiyacımız var. Bu yazımızda basit bir yöntem kullanacağız.gönderilermasa.
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
status VARCHAR(50) NOT NULL DEFAULT 'draft',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL
);Bu tablo bir blog yazısına ilişkin temel alanları içerir.kimliksütun birincil anahtardır.başlıkveiçeriksütunlar gönderi verilerini saklar.durumsütunu, gönderiyi taslak veya yayınlanmış olarak işaretlemek için kullanılabilir.
created_atalan, kaydın ne zaman oluşturulduğunu saklar;güncellendi_atson güncelleme zamanını saklayabilir.
Aynı CRUD mantığını kullanıcılar, ürünler, kategoriler, yorumlar, görevler veya mesajlar gibi diğer tablolarla kullanabilirsiniz.
PDO Veritabanı Bağlantısı
PHP, PDO kullanılarak MySQL'ya bağlanabilir. PDO, CRUD APIs için iyi bir seçimdir çünkü prepared statements'yu ve yapılandırılmış hata işlemeyi destekler.
Adlı bir dosya oluşturundb. phpveritabanı bağlantısı için.
<?php
$host = "localhost";
$dbname = "php_api";
$username = "root";
$password = "";
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$username,
$password
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $exception) {
http_response_code(500);
echo json_encode([
"success" => false,
"message" => "Database connection failed."
]);
exit;
}
?>utf8mb4karakter kümesi Arapça, Türkçe, İngilizce ve birçok özel karakteri desteklemesi nedeniyle çok dilli uygulamalar için önemlidir.
Üretimde, veritabanı kimlik bilgileri genel dizinin dışındaki ortam değişkenlerinde veya yapılandırma dosyalarında saklanmalıdır.
API Yanıt Yardımcısı
REST APIs tutarlı JSON yanıtları döndürmelidir. Bir yardımcı işlev, yanıtların daha temiz ve sürdürülmesini kolaylaştırabilir.
<?php
function jsonResponse($data, $statusCode = 200) {
http_response_code($statusCode);
header("Content-Type: application/json; charset=UTF-8");
echo json_encode($data);
exit;
}
?>Bu yardımcı, HTTP durum kodunu ayarlar, JSON içerik türünü ayarlar, yanıtı kodlar ve betiği durdurur.
Başarılı bir yanıt şöyle görünebilir:
{
"success": true,
"message": "Post created successfully.",
"data": {
"id": 1,
"title": "PHP CRUD"
}
}Bir hata yanıtı şöyle görünebilir:
{
"success": false,
"message": "Validation failed.",
"errors": {
"title": "Title is required."
}
}Tutarlı yanıtlar, API'nun ön uç uygulamalardan kullanımını kolaylaştırır.
JSON İstek Verilerini Okuma
Bir API oluştururken istemciler genellikle verileri normal form verileri yerine JSON olarak gönderir. PHP kullanarak ham istek gövdesini okuyabilirphp://giriş.
<?php
function getJsonInput() {
$json = file_get_contents("php://input");
$data = json_decode($json, true);
if (!is_array($data)) {
return [];
}
return $data;
}
?>Örneğin, bir ön uç bir gönderi oluştururken bu JSON’ı gönderebilir:
{
"title": "Learning PHP REST API",
"content": "This is a post about PHP API development.",
"status": "published"
}PHP API, bu JSON kodunu çözebilir ve doğrulama ve veritabanı işlemleri için değerleri kullanabilir.
POST ile Kayıt Oluşturun
Oluşturma işlemi veritabanına yeni bir kayıt ekler. REST API'da veri oluşturma genelliklePOSTYöntem.
Aşağıdaki örnek, JSON girişini ve hazırlanmış bir ifadeyi kullanarak yeni bir gönderi oluşturur.
<?php
require "db.php";
require "helpers.php";
$data = getJsonInput();
$title = trim($data["title"] ?? "");
$content = trim($data["content"] ?? "");
$status = trim($data["status"] ?? "draft");
$errors = [];
if ($title === "") {
$errors["title"] = "Title is required.";
}
if ($content === "") {
$errors["content"] = "Content is required.";
}
if (!in_array($status, ["draft", "published"], true)) {
$errors["status"] = "Status must be draft or published.";
}
if (count($errors) > 0) {
jsonResponse([
"success" => false,
"message" => "Validation failed.",
"errors" => $errors
], 422);
}
$statement = $pdo->prepare("
INSERT INTO posts (title, content, status)
VALUES (:title, :content, :status)
");
$statement->execute([
"title" => $title,
"content" => $content,
"status" => $status
]);
$postId = $pdo->lastInsertId();
jsonResponse([
"success" => true,
"message" => "Post created successfully.",
"data" => [
"id" => $postId,
"title" => $title,
"content" => $content,
"status" => $status
]
], 201);
?>Bu örnek girişi doğrular, kaydı ekler, son eklenen kimliği alır ve durum koduyla birlikte bir JSON yanıtı döndürür201 Oluşturuldu.
Kullanıcı girişi SQL yapısından ayrı olarak iletildiğinden, hazırlanan ifadeler ekleme sorgusunu SQL enjeksiyonundan korur.
GET ile Kayıtları Okuyun
Okuma işlemi veritabanından veri alır. REST API'da veri okuma genellikleGETYöntem.
Aşağıdaki örnek, gönderilerin bir listesini döndürür.
<?php
require "db.php";
require "helpers.php";
$statement = $pdo->query("
SELECT id, title, content, status, created_at, updated_at
FROM posts
ORDER BY id DESC
");
$posts = $statement->fetchAll();
jsonResponse([
"success" => true,
"data" => $posts
]);
?>Bu endpoint, tüm gönderileri bir JSON dizisi olarak döndürür. Gerçek uygulamalarda ayrıca sayfalandırma, arama, filtreler veya durum koşulları da ekleyebilirsiniz.
Örneğin, yalnızca yayınlanmış gönderileri döndürmek için hazırlanmış bir ifadeyi kullanabilirsiniz:
<?php
$status = "published";
$statement = $pdo->prepare("
SELECT id, title, content, status, created_at
FROM posts
WHERE status = :status
ORDER BY id DESC
");
$statement->execute([
"status" => $status
]);
$posts = $statement->fetchAll();
?>Okuma endpoints, ön uç sayfalar, kontrol panelleri, mobil uygulamalar ve API istemcileri tarafından depolanan verileri görüntülemek için kullanılır.
GET ile Tek Kayıt Oku
Bazen bir API'nun kimliğe göre bir kayıt döndürmesi gerekir. Örneğin, bir ön uç, bir gönderiden bir ayrıntı sayfasını görüntülemesini isteyebilir.
<?php
require "db.php";
require "helpers.php";
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
if (!$id) {
jsonResponse([
"success" => false,
"message" => "Valid post ID is required."
], 400);
}
$statement = $pdo->prepare("
SELECT id, title, content, status, created_at, updated_at
FROM posts
WHERE id = :id
LIMIT 1
");
$statement->execute([
"id" => $id
]);
$post = $statement->fetch();
if (!$post) {
jsonResponse([
"success" => false,
"message" => "Post not found."
], 404);
}
jsonResponse([
"success" => true,
"data" => $post
]);
?>Bu örnek, kimliği doğrular, gönderiyi arar, mevcut değilse bir 404 yanıtı döndürür ve bulunursa gönderi verilerini döndürür.
Doğru HTTP durum kodlarının döndürülmesi, ön uç geliştiricilerin farklı durumları doğru şekilde ele almasına yardımcı olur.
Kaydı PUT veya PATCH ile Güncelle
Güncelleme işlemi mevcut bir kaydı değiştirir. REST APIs'da,KOYtam güncellemeler için yaygın olarak kullanılırkenYAMAKısmi güncellemeler için kullanılır.
Aşağıdaki örnek, JSON girişini kullanarak bir gönderiyi günceller.
<?php
require "db.php";
require "helpers.php";
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
if (!$id) {
jsonResponse([
"success" => false,
"message" => "Valid post ID is required."
], 400);
}
$data = getJsonInput();
$title = trim($data["title"] ?? "");
$content = trim($data["content"] ?? "");
$status = trim($data["status"] ?? "draft");
$errors = [];
if ($title === "") {
$errors["title"] = "Title is required.";
}
if ($content === "") {
$errors["content"] = "Content is required.";
}
if (!in_array($status, ["draft", "published"], true)) {
$errors["status"] = "Status must be draft or published.";
}
if (count($errors) > 0) {
jsonResponse([
"success" => false,
"message" => "Validation failed.",
"errors" => $errors
], 422);
}
$statement = $pdo->prepare("
UPDATE posts
SET title = :title,
content = :content,
status = :status,
updated_at = NOW()
WHERE id = :id
");
$statement->execute([
"id" => $id,
"title" => $title,
"content" => $content,
"status" => $status
]);
if ($statement->rowCount() === 0) {
jsonResponse([
"success" => false,
"message" => "Post not found or no changes made."
], 404);
}
jsonResponse([
"success" => true,
"message" => "Post updated successfully."
]);
?>Bu örnek, kimliği ve girişi doğrular, kaydı günceller ve bir JSON yanıtı döndürür.
Gerçek uygulamalarda, kaydı güncellemeden önce öncelikle kaydın var olup olmadığını kontrol edebilirsiniz. Bu, herhangi bir değişiklik olmadığında yanıtın daha doğru olmasını sağlayabilir.
DELETE ile Kaydı Sil
Silme işlemi veri tabanından bir kaydı siler. REST APIs'da, verilerin silinmesi genellikleDELETEYöntem.
Aşağıdaki örnek, kimliğe göre bir gönderiyi siler.
<?php
require "db.php";
require "helpers.php";
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
if (!$id) {
jsonResponse([
"success" => false,
"message" => "Valid post ID is required."
], 400);
}
$statement = $pdo->prepare("DELETE FROM posts WHERE id = :id");
$statement->execute([
"id" => $id
]);
if ($statement->rowCount() === 0) {
jsonResponse([
"success" => false,
"message" => "Post not found."
], 404);
}
jsonResponse([
"success" => true,
"message" => "Post deleted successfully."
]);
?>Gerçek uygulamalarda silme işlemleri her zaman korunmalıdır. Kullanıcılar izin almadıkça kayıtları silememelidir.
Bazı sistemler kalıcı silme yerine kalıcı silmeyi kullanır. Geçici silme, aşağıdaki gibi bir alan kullanılarak kaydı silinmiş olarak işaretler:silinmiş_at, verileri veritabanında tutarken.
PHP’de Basit REST Yönlendirici
Her endpoint için ayrı bir dosya oluşturmak yerine, istek yöntemini kontrol eden ve doğru eylemi gerçekleştiren basit bir yönlendirici oluşturabilirsiniz.
Çok basit bir yönlendiricinin kullanabileceği$_SERVER["REQUEST_METHOD"].
<?php
require "db.php";
require "helpers.php";
$method = $_SERVER["REQUEST_METHOD"];
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
if ($method === "GET" && $id) {
// Show one post
} elseif ($method === "GET") {
// List posts
} elseif ($method === "POST") {
// Create post
} elseif ($method === "PUT" || $method === "PATCH") {
// Update post
} elseif ($method === "DELETE") {
// Delete post
} else {
jsonResponse([
"success" => false,
"message" => "Method not allowed."
], 405);
}
?>Bu temel bir örnek. Profesyonel uygulamalar genellikle API endpoints'yu daha temiz bir şekilde düzenlemek için bir yönlendirici, çerçeve veya MVC yapısı kullanır.
Ancak bu basit yapıyı anlamak, yeni başlayanların REST APIs'nun perde arkasında nasıl çalıştığını anlamasına yardımcı olur.
CRUD APIs'da doğrulama
CRUD APIs'da doğrulama önemlidir. Her oluşturma ve güncelleme isteği, gönderilen verileri veritabanına kaydetmeden önce kontrol etmelidir.
API gönderileri için doğrulama şunları içerebilir:
Başlık gerekli.
Başlık çok uzun olmamalıdır.
İçerik gereklidir.
Durum taslak veya yayınlanmış olmalıdır.
Kimlik geçerli bir tamsayı olmalıdır.
Basit bir doğrulama işlevi kodu daha temiz hale getirebilir:
<?php
function validatePostData($data) {
$errors = [];
$title = trim($data["title"] ?? "");
$content = trim($data["content"] ?? "");
$status = trim($data["status"] ?? "draft");
if ($title === "") {
$errors["title"] = "Title is required.";
} elseif (strlen($title) > 200) {
$errors["title"] = "Title must not exceed 200 characters.";
}
if ($content === "") {
$errors["content"] = "Content is required.";
}
if (!in_array($status, ["draft", "published"], true)) {
$errors["status"] = "Status must be draft or published.";
}
return $errors;
}
?>Doğrulama hatalarının JSON olarak döndürülmesi, ön ucun kullanıcıya net mesajlar göstermesine yardımcı olur.
CRUD APIs'da Hazırlanan İfadeler
CRUD APIs'da hazırlanmış ifadeler gereklidir çünkü API girişi genellikle kullanıcılardan, formlardan, ön uç uygulamalarından veya harici sistemlerden gelir.
Güvenli olmayan SQL'dan kaçınılmalıdır:
<?php
$sql = "SELECT * FROM posts WHERE id = " . $_GET["id"];
?>Güvenli SQL, prepared statements'yu kullanır:
<?php
$statement = $pdo->prepare("SELECT * FROM posts WHERE id = :id");
$statement->execute([
"id" => $id
]);
?>Hazırlanan ifadeler, sorgu yapısını giriş değerlerinden ayırarak SQL enjeksiyonuna karşı koruma sağlar.
Giriş söz konusu olduğunda SELECT, INSERT, UPDATE ve DELETE işlemleri için prepared statements'yu kullanın.
REST API'daki HTTP Durum Kodları
HTTP durum kodları, API istemcilerinin bir isteğin sonucunu anlamasına yardımcı olur. İyi bir REST API anlamlı durum kodları döndürmelidir.
Yaygın durum kodları şunları içerir:
200 Tamam:istek başarılı oldu.
201 Oluşturuldu:yeni bir kayıt oluşturuldu.
400 Hatalı İstek:istek geçersiz.
401 Yetkisiz:kimlik doğrulaması gereklidir.
403 Yasak:kullanıcının eylemi gerçekleştirmesine izin verilmez.
404 Bulunamadı:istenen kayıt mevcut değil.
405 Yöntemine İzin Verilmiyor:HTTP yöntemi desteklenmiyor.
422 İşlenemeyen Varlık:doğrulama başarısız oldu.
500 Dahili Sunucu Hatası:sunucuda bir şeyler başarısız oldu.
Örneğin, bir gönderi başarıyla oluşturulduysa 201 değerini döndürün. Doğrulama başarısız olursa 422 değerini döndürün. Gönderi yoksa 404 değerini döndürün.
Durum kodları APIs'yu daha profesyonel hale getirir ve ön uç uygulamalarla entegrasyonunu kolaylaştırır.
CRUD API'da Arama ve Filtreleme
CRUD APIs sıklıkla arama ve filtrelemeye ihtiyaç duyar. Örneğin, API gönderileri başlığa göre aramaya veya duruma göre filtrelemeye izin verebilir.
<?php
$keyword = trim($_GET["q"] ?? "");
$status = trim($_GET["status"] ?? "");
$sql = "SELECT id, title, content, status, created_at FROM posts WHERE 1 = 1";
$params = [];
if ($keyword !== "") {
$sql .= " AND title LIKE :keyword";
$params["keyword"] = "%" . $keyword . "%";
}
if ($status !== "") {
$sql .= " AND status = :status";
$params["status"] = $status;
}
$sql .= " ORDER BY id DESC";
$statement = $pdo->prepare($sql);
$statement->execute($params);
$posts = $statement->fetchAll();
jsonResponse([
"success" => true,
"data" => $posts
]);
?>Bu örnek, giriş değerleri için hala prepared statements kullanırken dinamik bir sorgu oluşturur.
Arama ve filtreleme, yönetici panellerinde, kontrol panellerinde, blog sistemlerinde, ürün listelerinde ve raporlama sayfalarında faydalıdır.
CRUD API'da sayfalandırma
Sayfalandırma, aynı anda kaç kaydın döndürüleceğini sınırlar. Bu, performansı artırır ve büyük veri kümelerinin görüntülenmesini kolaylaştırır.
Basit bir sayfalandırma sisteminin kullanabileceğiLIMITveOFSET.
<?php
$page = max(1, (int) ($_GET["page"] ?? 1));
$perPage = 10;
$offset = ($page - 1) * $perPage;
$statement = $pdo->prepare("
SELECT id, title, content, status, created_at
FROM posts
ORDER BY id DESC
LIMIT :limit OFFSET :offset
");
$statement->bindValue(":limit", $perPage, PDO::PARAM_INT);
$statement->bindValue(":offset", $offset, PDO::PARAM_INT);
$statement->execute();
$posts = $statement->fetchAll();
jsonResponse([
"success" => true,
"page" => $page,
"per_page" => $perPage,
"data" => $posts
]);
?>Çok sayıda kayıtla çalışırken sayfalandırma önemlidir. Sayfalandırma olmadan API çok fazla veri döndürebilir ve yavaşlayabilir.
PHP REST APIs'daki CORS
CORS, Çapraz Kaynaklı Kaynak Paylaşımı anlamına gelir. Başka bir etki alanından bir ön ucun API ürününüzü çağırıp arayamayacağını kontrol eder.
Geliştirme sırasında, başka bir etki alanında veya bağlantı noktasında çalışan bir ön uç uygulamasından gelen isteklere izin vermeniz gerekebilir.
<?php
header("Access-Control-Allow-Origin: https://example.com");
header("Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
if ($_SERVER["REQUEST_METHOD"] === "OPTIONS") {
http_response_code(204);
exit;
}
?>Üretim için, gerçekten gerekli olmadıkça tüm kökenlere izin vermekten kaçının. Yalnızca güvenilir ön uç etki alanlarına izin vermek daha güvenlidir.
CORS kimlik doğrulama değildir. Yalnızca tarayıcı tabanlı çapraz kaynak erişimini kontrol eder. API cihazınız, korumalı eylemler için yine de uygun kimlik doğrulama ve yetkilendirmeyi kullanmalıdır.
CRUD REST API için kimlik doğrulama
Bazı CRUD APIs herkese açıktır, ancak çoğunun kimlik doğrulamasına ihtiyacı vardır. Örneğin, yayınlanan gönderileri herkes okuyabilir ancak yalnızca oturum açmış yöneticiler gönderileri oluşturmalı, güncellemeli veya silmelidir.
Kimlik doğrulama, oturumlar, API belirteçleri, JWT veya çerçeveye özgü kimlik doğrulama araçları kullanılarak gerçekleştirilebilir.
Çok basit bir API token kontrolü şöyle görünebilir:
<?php
$headers = getallheaders();
$token = $headers["Authorization"] ?? "";
$expectedToken = "Bearer your-secret-token";
if ($token !== $expectedToken) {
jsonResponse([
"success" => false,
"message" => "Unauthorized."
], 401);
}
?>Bu sadece basit bir gösteri. Gerçek API kimlik doğrulaması, güvenli belirteç depolama, süre sonu, izinler ve HTTPS ile daha dikkatli tasarlanmalıdır.
Yetkilendirme de önemlidir. Oturum açmış bir kullanıcı yalnızca gerçekleştirmesine izin verilen eylemleri gerçekleştirmelidir.
Tam CRUD API Yapısı
Küçük bir PHP CRUD REST API projesi şu şekilde organize edilebilir:
project/
├── api/
│ └── posts.php
├── config/
│ └── db.php
├── helpers/
│ └── response.php
└── public/
└── index.htmldb. phpdosya veritabanı bağlantısını içerir.yanıt. phpdosya, JSON yanıtları ve JSON giriş okuması gibi yardımcı işlevleri içerir.gönderiler. phpdosya CRUD mantığını içeriyor.
Daha büyük projeler için yapı daha temiz olmalı ve denetleyicileri, modelleri, hizmetleri, depoları, ara yazılımı ve yönlendirmeyi içermelidir.
Laravel gibi çerçeveler bu yapıları kutudan çıkarır çıkarmaz sağlar, ancak basit ve saf bir PHP CRUD API oluşturmak, temel fikri anlamanıza yardımcı olur.
PHP CRUD ve REST API için Güvenlik Notları
CRUD APIs veritabanı verilerini yönetir, dolayısıyla güvenlik çok önemlidir. Giriş alan, verileri değiştiren veya özel bilgileri açığa çıkaran herhangi bir endpoint korunmalıdır.
Önemli güvenlik uygulamaları şunları içerir:
Tüm veritabanı sorguları için prepared statements kullanın.
Kaydetmeden önce tüm istek verilerini doğrulayın.
Veritabanı ayrıntılarını açığa çıkarmadan güvenli hata mesajları döndürün.
Korumalı endpoints için kimlik doğrulamayı kullanın.
Güncelleme ve silme eylemleri için yetkilendirme kontrollerini kullanın.
Üretimde HTTPS kullanın.
CORS'u güvenilir etki alanlarıyla sınırlandırın.
API verilerini HTML'da görüntülerken çıkıştan çıkın.
Büyük veri kümeleri için sayfalandırmayı kullanın.
Sunucu hatalarını kullanıcılara göstermek yerine özel olarak günlüğe kaydedin.
Güvenlik her katmana uygulanmalıdır: giriş doğrulama, veritabanı erişimi, kimlik doğrulama, yetkilendirme, yanıt yönetimi ve dağıtım yapılandırması.
Modern PHP Çerçevelerinde CRUD API
Laravel gibi modern PHP çerçeveleri, CRUD API geliştirmeyi daha hızlı ve daha organize hale getirir. Laravel yönlendirme, denetleyiciler, istek doğrulama, Eloquent modelleri, geçişler, API kaynakları, ara yazılım, kimlik doğrulama ve yetkilendirme sağlar.
Ancak CRUD'yu düz PHP ve PDO ile anlamak hala önemlidir. Veritabanı işlemlerinin arkasındaki temeli, JSON yanıtlarını, prepared statements'yu, HTTP yöntemlerini ve API yapısını öğretir.
Saf PHP CRUD APIs'yu anladığınızda, Laravel APIs'ya geçmek daha kolay hale gelir çünkü aynı kavramlar hâlâ mevcuttur ancak bunlar çerçeve araçları aracılığıyla düzenlenir.
Sonuç
PHP CRUD, MySQL ve REST API ile temel bir arka uç geliştirme konusudur. Veritabanı işlemlerini, HTTP yöntemlerini, JSON yanıtlarını, doğrulamayı, prepared statements'yu, hata işlemeyi ve güvenlik uygulamalarını birleştirir.
Ana CRUD işlemleri oluşturma, okuma, güncelleme ve silmedir. Bir REST API'da bu işlemler genellikle POST, GET, PUT, PATCH ve DELETE gibi HTTP yöntemlerine bağlanır.
PHP’de MySQL ve REST API ile CRUD'yu öğrendikten sonraki adım, API blogu, API görev yöneticisi, API ürün yönetimi veya yönetici kontrol paneli gibi küçük pratik bir proje oluşturmaktır. API. Bu projeler, PHP, MySQL ve ön uç uygulamalarının gerçek bir geliştirme iş akışında birbirine bağlanmasına yardımcı olacaktır.

