Message: | Trying to access array offset on value of type null |
File: | /home/romarekl/public_html/sosyallift.com/ow_plugins/forum/controllers/topic.php |
Line: | 136 |
Okuyuculardan çok sayıda talep aldım ve bir sürü arama yaptıktan sonra PHP RESTful API Tutorial'ı oluşturmak için hafif bir çerçeve çalışması yaptım . Orada mevcut çerçeveler bir dizi verimli güçlü web servisleri yazmak bir mikro çerçevesidir). Bu eğitici, GET , POST , PUT ve DELETE gibi çoklu HTTP yöntemlerini kullanarak tam Restful API oluşturmanın örneklerini sunar . Sen de çıkışını alacağı JSON ve alloptions için bir kullanıcı veri oluşturmak .
HTTP yöntemleri:
GET : Verileri almak ve aramak için kullanılır.
POST : Veri eklemek için kullanılır.
PUT : Verileri güncellemek için kullanılır.
DELETE : Verileri silmek için kullanılır.
Api klasörünüzde aşağıdaki .htaccess dosyasını ekleyin http: // localhost / api
RewriteEngine On
RewriteBase /api # if hosting api files on root use only /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Veritabanı tasarımı ve tablo:
veritabanı adı => phpgang
tablo adı => restAPI
sütun adları => id, isim, e-posta, ip, tarih
db.sql
Veritabanı dosyası veritabanı oluşturmak ve tablodaki verileri eklemek için MySQL'inizde çalıştırın.
--
-- Table structure for table `restAPI`
--
CREATE TABLE `restAPI` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(240) NOT NULL,
`email` varchar(240) NOT NULL,
`password` varchar(240) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
);
Veritabanı yapılandırması
Yapılandırmanıza göre veritabanı adını, kullanıcı ve şifreyi düzenle
function getConnection() {
try {
$db_username = "DATABASE_NAME";
$db_password = "********";
$conn = new PDO('mysql:host=localhost;dbname=root', $db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
return $conn;
}
Kolayca kullanabildiğiniz PDO bağlantısı ile bu işlevi aynı yöntemlere ekledim ve siz de projelerinize göre bunları yönetebilirsiniz.
API'yi uygulayın
6 API yöntemi oluşturduk
HTTP rotalarını tanımla:
$app->get('/users', 'getUsers'); // Using Get HTTP Method and process getUsers function
$app->get('/users/:id', 'getUser'); // Using Get HTTP Method and process getUser function
$app->get('/users/search/:query', 'findByName'); // Using Get HTTP Method and process findByName function
$app->post('/users', 'addUser'); // Using Post HTTP Method and process addUser function
$app->put('/users/:id', 'updateUser'); // Using Put HTTP Method and process updateUser function
$app->delete('/users/:id', 'deleteUser'); // Using Delete HTTP Method and process deleteUser function
$app->run();
Bu tüm yollar, yukarıda tanımlandığı şekilde ve son $ app-> run (); İnce uygulamayı çalıştırmak için kullanılır.
fonksiyonları görelim:
1.Kullanıcı: $ app-> get ('/ users', 'getUsers');
function getUsers() {
$sql_query = "select `name`,`email`,`date`,`ip` FROM restAPI ORDER BY name";
try {
$dbCon = getConnection();
$stmt = $dbCon->query($sql_query);
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbCon = null;
echo '{"users": ' . json_encode($users) . '}';
}
catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu işlev, bu sorguda görebildiğiniz gibi tüm kullanıcı bilgilerini basitçe döndürür, bu API'yi kullanmak için bu URL'yi kullanın http: // localhost / api / users Bu, ilk rotanız olsun, rotayı kullanın.
2. getUser: $ app-> get ('/ users /: id', 'getUser '); Bu rotada id gönderiyoruz.
function getUser($id) {
$sql = "SELECT `name`,`email`,`date`,`ip` FROM restAPI WHERE id=:id";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$user = $stmt->fetchObject();
$dbCon = null;
echo json_encode($user);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu işlev, verilen id dosyasının kaydını kontrol eder ve herhangi bir şey bulursanız iade eder, this bu API'yi çağırmak için bu URL'yi kullanın http: // localhost / api / users / 1 .
3. findByName: $ app-> get ('/ users / search /: query', 'findByName'); Rota, ekstra parametre ve basit get yöntemiyle bir arama sorgusuyla kayıt aramak için kullanılır.
function findByName($query) {
$sql = "SELECT * FROM restAPI WHERE UPPER(name) LIKE :query ORDER BY name";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$query = "%".$query."%";
$stmt->bindParam("query", $query);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbCon = null;
echo '{"user": ' . json_encode($users) . '}';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu işlev, verilen sorgu için veritabanında arama yapar, this bu API'yi çağırmak için şu URL'yi kullanın : http: // localhost / api / users / search / phpgang .
PHP REST API oluştur
4. addUser: $ app-> gönderi ('/ users', 'addUser'); API yeni kayıt eklemek ve gönderiyi kabul etmek için kullanılır.
function addUser() {
global $app;
$req = $app->request(); // Getting parameter with names
$paramName = $req->params('name'); // Getting parameter with names
$paramEmail = $req->params('email'); // Getting parameter with names
$sql = "INSERT INTO restAPI (`name`,`email`,`ip`) VALUES (:name, :email, :ip)";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("name", $paramName);
$stmt->bindParam("email", $paramEmail);
$stmt->bindParam("ip", $_SERVER['REMOTE_ADDR']);
$stmt->execute();
$user->id = $dbCon->lastInsertId();
$dbCon = null;
echo json_encode($user);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu API, gönderim isteğini kabul eder ve bu işlevin başlamasında parametreler aldığımız için veritabanınıza gönderilen verileri ekler. Bu API'yi çağırmak için cURL kullandım, jQuery'yi veya başka bir tekniği kullanabilirsiniz.
<?php
if($_POST){
echo post_to_url("http://localhost/users", $_POST);
} else{
?>
ADD RECORD.
<form action="" method="post">
<input type="text" name="name" placeholder="Name" /><br>
<input type="text" name="email" placeholder="Email" /><br>
<input type="hidden" name="_METHOD" value="POST" />
<input type="submit" value="A D D" />
</form>
<?php
}
?>
Bu form eylem dosyanıza gönderilecek ve bir curl var ve bu curl, POST değeriyle _METHOD'un gizli bir girişini kullanmış olduğumdan veri yayınlayacaktır, çünkü cURL'iniz bazı zamanlar API'ye Veri göndermemelidir ( Bunu post için de kullandı) ve Slim bize bu işlevselliği geçersiz kılmaya ve modern tarayıcılarımızın PUT'ye ve silmeye yönelik yerel desteğine sahip olmadığından, aşağıdaki gibi geçersiz kılma yöntemini kullanmamız gerektiğinden verin.
PHP RESTful API'sı
<input type="hidden" name="_METHOD" value="POST" /> <!-- POST data -->
<input type="hidden" name="_METHOD" value="PUT" /> <!-- PUT data -->
<input type="hidden" name="_METHOD" value="DELETE" /> <!-- DELETE data -->
veri göndermek için cURL işlevi:
function post_curl($_url, $_data) {
$mfields = '';
foreach($_data as $key => $val) {
$mfields .= $key . '=' . $val . '&';
}
rtrim($mfields, '&');
$pst = curl_init();
curl_setopt($pst, CURLOPT_URL, $_url);
curl_setopt($pst, CURLOPT_POST, count($_data));
curl_setopt($pst, CURLOPT_POSTFIELDS, $mfields);
curl_setopt($pst, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($pst);
curl_close($pst);
return $res;
}
5. updateUser: $ app-> put ('/ users /: id', 'updateUser'); Bu rota HTTP yöntemini kabul eder.
function updateUser($id) {
global $app;
$req = $app->request();
$paramName = $req->params('name');
$paramEmail = $req->params('email');
$sql = "UPDATE restAPI SET name=:name, email=:email WHERE id=:id";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("name", $paramName);
$stmt->bindParam("email", $paramEmail);
$stmt->bindParam("id", $id);
$status = $stmt->execute();
$dbCon = null;
echo json_encode($status);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu API işlevi, verilerinizi kimliğine göre günceller, bu API'yi çağırmak için cURL ve HTML formunu tekrar kullanmamız gerekir.
<?php
if($_POST){
echo post_to_url("http://localhost/users/".$_POST['id'], $_POST); // add id after last slash which you want to edit.
} else{
UPDATE RECORD.
<br>
<form action="" method="post">
<input type="text" name="id" placeholder="Id to update" /><br>
<input type="text" name="name" placeholder="Name" /><br>
<input type="text" name="email" placeholder="Email" /><br>
<input type="hidden" name="_METHOD" value="PUT" />
<input type="submit" value="U P D A T E" />
</form>
<?php
}
?>
6. deleteUser: $ app-> sil ('/ users /: id', 'deleteUser '); Rota, kimliğini silmek için kullanılır.
function deleteUser($id) {
$sql = "DELETE FROM restAPI WHERE id=:id";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("id", $id);
$status = $stmt->execute();
$dbCon = null;
echo json_encode($status);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Bu API işlevi HTTP silme isteğini kabul eder ve HTTP silme yöntemini göndermek için _METHOD adındaki gizli alanımızı kullanarak geçersiz kılma yöntemini kullanmalı ve değeri aşağıda verilen DELETE form ve cURL kodu olacaktır .
<?php
if($_POST){
echo post_to_url("http://localhost/users/".$_POST['id'], $_POST);
} else{
?>
DELETE RECORD.
<br>
<form action="" method="post">
<input type="text" name="id" placeholder="Id to delete" /><br>
<input type="hidden" name="_METHOD" value="DELETE" />
<input type="submit" value="D E L E T E" />
</form>
<?php
}
?>
Bu RESTful API için en büyük öğretici biri için hepsi budur , umarım bu öğretici hoşunuza gider ve lütfen bize geri bildiriminizi ve bu eğitimde karşılaştığınız herhangi bir sorunu bize bildirmeyi unutmayın lütfen yorum yapın.