JSON dosya uzantısı PHP çıktı REST API

3 Cevap php

Yani iPhone tüketim için JSON PHP bir REST API değil, aynı zamanda web siteleri ve cihazlar bir çok yazmak istiyorum. GET açıklamada erişilen zaman, aşağıdaki kodu var, gibi bir dosya verir:

1mdi2o3.part

Users.json: Nasıl böyle bir şey dönmek yok

$db->setQuery( "SELECT * FROM users");
$db->query() or die($queryError);
$numRows = $db->getNumRows();
$row = $db->loadObjectList();

// PRINT JSON FILE
header("Content-type: application/json");

for($i = 0 ; $i < $numRows; $i++){
$json_output[$i] = $row[$i];
}

$MYjson_output = json_encode($json_output);

echo $MYjson_output;

3 Cevap

Tamamen böyle değil ne hedefiniz ama burada işe yarayabilir 3-4 çözümler şunlardır:

Common Solutions

Rewrite

Bu probaly sizin API temiz URI'lere almanın en geleneksel yoludur. Eğer user.json kullanıcı parçası dinamik olmak istiyorsanız, bir php işleyici komut dosyası için URL'leri yeniden yazmak için mod_rewrite (yine Apache varsayarak) kullanabilirsiniz. Eğer geleneksel sığınakta stil URL yolu gidiş varsa, muhtemelen temiz / ayrılmış URL ulaşmak için bu yine de kullanmak isteyeceksiniz.

# For grabbing all users
RewriteEngine on
RewriteRule ^users\.json rest.php [L]

# For grabbing one particular user
RewriteEngine on
RewriteRule ^([a-z0-9]+)\.json rest.php?user=$1 [L]

Rest.php PHP işleyici komut dosyası olduğu.

URL Rewriting without mod-rewrite

Eğer mod_rewrite kullanmak istemiyorsanız, ayrıca gibi bir şey yapabilirsiniz

example.com/rest.php/users.json
example.com/rest.php/user-id.json

ya da

example.com/rest.php/user-id
example.com/rest.php/user/user-id

Rest.php PHP işleyici komut dosyası olduğu. You can grab the user-id from the URL (or URI if we're talking RESTful terms) using the $_SERVER global with $_SERVER['REQUEST_URI'].

Other solutions

Changing download name via Content-Disposition:

Sana Content-Disposition başlık eklemek istiyorum inanıyorum ...

<?php
    header('Content-Disposition: attachment; filename="users.json"');
?>

Bu user.json olarak indirilecek dosya zorlar. Bu genellikle bir REST API için beklenen davranış değildir, ama soru ifadeli edildi yoldan, ben oraya atmak düşündüm.

AddHandler (or AddType)

Eğer bir Apache sunucusunu çalıştıran varsayarak, siz de sadece onlar php gibi .json uzantılı dosyaları tedavi olmak için AddHandler direktifini kullanabilirsiniz.

AddHandler application/x-httpd-php .json

Warning: Other plain .json files will be treated as PHP so you'd probably want to set this in a .htaccess file in the directory with the PHP script. This would work fine for this one URI but not ideal if you were exposing many URIs

SO hoşgeldiniz. Bu uygulama için Zend framework kullanarak düşündünüz mü? I written about this topic before ettik ve Zend kullanmak yaparsanız ben muhtemelen ek bir yardım olabilir. Kesinlikle temel geçmiş olsun size yardımcı olacaktır.

HTH,

-Aj

Sorun bu satırı:

header("Content-type: application/json");

Ben bu (json içerik için application/json is resmi MIME tipi, tüm sonra) yapmak için doğru yol gibi görünüyor biliyorum, ama çoğu tarayıcılar bir dosya indirme iletişim ile size sunmak için neden , sadece metni görmek istediğinizde. Bunu önlemek için text/plain kodlamasını kullanabilirsiniz. AJAX / iPhone / ... app muhtemelen içerik türü umurumda değil, bu yüzden API iki durumda çalışacağını unutmayın.

Ayrıca this blog post biraz daha hangi bağlam bakın sağlar.