2011-11-28 33 views
31

URL'lerini Temiz Kullanma "RESTful URL'ler" olarak da bilinen "URL'leri temizle", kullanıcı dostu, yalnızca yapısaldır ve bir sorgu dizesi içermez. Bunun yerine yalnızca kaynağın yolunu içerirler.RESTful API

yani: "http://twitter.com/users/show/"+username+".json" sunucu tarafı işlevselliği hakkında

Sorular:

  1. Do I gerekiyor Her bir dizin için benzersiz bir sunucu tarafı API betiği oluşturmak?

  2. Tüm istekleri yalnızca tek bir komut dosyasına iletebilir miyim? Öyleyse nasıl Temiz URL yapısından ($ _GET ['url_structure']) yararlı bilgiler alabilirim?

  3. Neden twitter, kesinlikle bulunmayan bir .json dosyası olan numaralı telefonu arayın. İstek üzerine üretilmelidir. Bu nasıl çalışır? Bu bana 2 sorusunun cevabının evet olduğuna inanmamı sağlıyor.

+1

Temiz URL'lerin REST apis ile ilgisi yoktur. Bunlar, çirkin sorgu dizeleri olabilecek URL'leri güzelleştirmek için iyi bir yol. Genellikle, temiz URL'yi almak ve bir sorgu dizesi sürümüne geri dönüştürmek için mod_rewrite kullanılarak uygulanırlar. –

cevap

53

1) değil RecessPHP gibi bir sığınakta çerçeve kullanın veya eğer) ön denetleyicisi olarak bilinen tek bir PHP dosyası (tüm API isteklerini yeniden yönlendirmek için .htaccess dosyasında bir mod_rewrite'ı kuralı kullanmak faydalı olacaktır.

.htaccess

RewriteEngine On 
RewriteRule ^/api/ api.php 

api.php

$request = $_SERVER['REQUEST_URI']; //this would be /users/show/abc.json 

2) Özel bir bütün API isteklerini yönlendirmek için apache yeniden yazma modülünü kullanabilirsiniz Onları işleyen PHP dosyası. Apache yapılandırmanıza bağlı olarak, istenen orijinal (RESTful) URL, PHP'deki bir sunucu değişkeninde saklanır, ben $_SERVER['REQUEST_URI'] olduğuna inanıyorum. Tabii ki sadece RESTful url içeren PHP'ye $_GET[] değişkenini de iletebilirsiniz. bunun için uygun bir yöntemdir, çünkü

.htaccess

RewriteEngine On 
RewriteRule ^/api/([^\.]+).(xml|json|atom) api.php?url=$1&type=$2 

api.php

$request_parts = explode('/', $_GET['url']); // array('users', 'show', 'abc') 
$file_type  = $_GET['type']; 

$output = get_data_from_db(); //Do your processing here 
           //You can outsource to other files via an include/require 

//Output based on request 
switch($file_type) { 
    case 'json': 
     echo json_encode($output); 
     break; 
    case 'xml': 
     echo xml_encode($output); //This isn't a real function, but you can make one 
     break; 
    default: 
     echo $output; 
} 

3) Heyecan (ve diğer birçok API) bunu kullanın Bir uygulamanın bir API'dan beklediği biçimi sağlamak. Tüm API istekleri, tüm dosyaları oluşturmayı ve içeriklerini çıktıya yansıtan tek bir PHP dosyasına yönlendirilir. Dosya asla sunucuda saklanmaz (önbelleğe alınmadığı sürece).


İyi Kaynaklar


bir not o n RecessPHP. Bu kesinlikle harika bir araç ve size (belki de nasıl bir şeyleri nasıl işlediğine dair bir fikir edinmek için kaynağında) bakmaya cesaretlendirirdim, ama bunun benim için biraz garip görünüyor. Yol isimlerinin özel yorumlarda yazılması gerçeği bana çok değil. Bundan uzaklaşırdım ve ona mükemmel bir çerçeve demezdim, ama kesinlikle bir başlangıç. İyi şanslar!

+2

Müthiş yanıt için teşekkürler. Bana çok zaman kazandırmadığı sürece genellikle çerçevelerden uzaklaşırım. Ama kesinlikle Recess'i kontrol edeceğim. –

+0

Ben de RESTful URL'lerin sunucu tarafında uygulanması hakkında ipuçları arıyordum. Ön Kontrol ünitesinin dahil olduğundan şüphelendim, bu yüzden netlik için teşekkürler. Bu harika bir cevap. – ComethTheNerd

+0

@Bailey Parker :: Sağladığınız Recess PHP Bağlantısı artık çalışmıyor: "BİLDİRİM: Bu alan adı 10/29/2017 tarihinde sona ermiş ve yenileme veya silinmeyi bekliyor." – Peter

-4

CodeIgniter gibi bir çerçeve kullanırdım. URL'nin her bir kısmı için bir dizine ihtiyacınız yoktur, yalnızca tüm URL'leri belirli bir URL'ye yönlendirmek için bir .htaccess dosyası kullanırsınız ve bu URL'nin tüm eylemlerle ilgilenmesini sağlayın.

+0

Bu, burada yaptığım şey. Belirtilen api.php dosyasına işaret etmek için bir .htaccess dosyası kullanıyorum. Daha sonra, kullanıcıyı nereye göndereceğine karar vermek için mantık kullanır. – PHPGuru

5

Bu, benim için çalıştı: Web sitenizin kökündeki htaccess dosyasına koyun.

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L] 
RewriteRule (recipe/.*) api/app.php?request=$1 [QSA,NC,L] 
</IfModule> 

Ve sayfa http://localhost/api/person/susan giderseniz o zaman Bunu http://localhost/api/api.php de dosyaya götürür göreceksiniz Ben de http://localhost/recipe/edit/2 api.php koy kullanarak gitmek bir tarif sayfam var dosya: reçeteye veya ne kadar olmasını istediğiniz için kimliği olan bir sayı olabilir eklemek veya düzenlemek ve veri: tarifi, aksiyon:

<?php 
$requestParts = explode('/',$_GET['request']); 
$category = $requestParts[0]; 
$action = $requestParts[1]; 
$data = $requestParts[2]; 
if($category == 'recipe'){ 
    include($_SERVER['DOCUMENT_ROOT'].'/pages/add_recipe.php'); 
} 

değişkenler yukarıdaki kategoriyi düzenleyecek. Daha sonra add_recipe.php dosyasının içinde, düzenleme yapıp yapmadığınızı veya bir reçete ekleyip eklemediğinizi belirlemek için değişkenleri kullanın. Eğer api'yi kullanırsanız, api'nizle konuşmak için kullandığınız ajax isteğine bağlı olarak farklı dosyalar ekleyebilirsiniz.

İlgili konular