php restful响应,php – 创建Restful API在响应之前应该放出什么样的标题?

现在这就是你想要的.

主文件:Rest.inc.php

class REST {

public $_allow = array();

public $_content_type = "application/json";

public $_request = array();

private $_method = "";

private $_code = 200;

public function __construct(){

$this->inputs();

}

public function get_referer(){

return $_SERVER['HTTP_REFERER'];

}

public function response($data,$status){

$this->_code = ($status)?$status:200;

$this->set_headers();

echo $data;

exit;

}

private function get_status_message(){

$status = array(

100 => 'Continue',

101 => 'Switching Protocols',

200 => 'OK',

201 => 'Created',

202 => 'Accepted',

203 => 'Non-Authoritative Information',

204 => 'No Content',

205 => 'Reset Content',

206 => 'Partial Content',

300 => 'Multiple Choices',

301 => 'Moved Permanently',

302 => 'Found',

303 => 'See Other',

304 => 'Not Modified',

305 => 'Use Proxy',

306 => '(Unused)',

307 => 'Temporary Redirect',

400 => 'Bad Request',

401 => 'Unauthorized',

402 => 'Payment Required',

403 => 'Forbidden',

404 => 'Not Found',

405 => 'Method Not Allowed',

406 => 'Not Acceptable',

407 => 'Proxy Authentication Required',

408 => 'Request Timeout',

409 => 'Conflict',

410 => 'Gone',

411 => 'Length Required',

412 => 'Precondition Failed',

413 => 'Request Entity Too Large',

414 => 'Request-URI Too Long',

415 => 'Unsupported Media Type',

416 => 'Requested Range Not Satisfiable',

417 => 'Expectation Failed',

500 => 'Internal Server Error',

501 => 'Not Implemented',

502 => 'Bad Gateway',

503 => 'Service Unavailable',

504 => 'Gateway Timeout',

505 => 'HTTP Version Not Supported');

return ($status[$this->_code])?$status[$this->_code]:$status[500];

}

public function get_request_method(){

return $_SERVER['REQUEST_METHOD'];

}

private function inputs(){

switch($this->get_request_method()){

case "POST":

$this->_request = $this->cleanInputs($_POST);

break;

case "GET":

//break;

case "DELETE":

$this->_request = $this->cleanInputs($_GET);

break;

case "PUT":

parse_str(file_get_contents("php://input"),$this->_request);

$this->_request = $this->cleanInputs($this->_request);

break;

default:

$this->response('',406);

break;

}

}

private function cleanInputs($data){

$clean_input = array();

if(is_array($data)){

foreach($data as $k => $v){

$clean_input[$k] = $this->cleanInputs($v);

}

}else{

if(get_magic_quotes_gpc()){

$data = trim(stripslashes($data));

}

$data = strip_tags($data);

$clean_input = trim($data);

}

return $clean_input;

}

private function set_headers(){

header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());

header("Content-Type:".$this->_content_type);

}

}

?>

文件api.php中的API函数

error_reporting(E_ALL ^ E_DEPRECATED);

require_once("Rest.inc.php");

class API extends REST {

public $data = "";

const DB_SERVER = "host";

const DB_USER = "username";

const DB_PASSWORD = "asdfgf";

const DB = "database name";

private $db = NULL;

public function __construct(){

parent::__construct(); // Init parent contructor

$this->dbConnect(); // Initiate Database connection

}

/*

Database connection

*/

private function dbConnect(){

$this->db = mysql_pconnect(self::DB_SERVER,self::DB_USER,self::DB_PASSWORD);

if (!$this->db)

{

echo "Please try later.";

}

if($this->db)

mysql_select_db(self::DB,$this->db);

}

/*

* Public method for access api.

* This method dynmically call the method based on the query string

*

*/

public function processApi(){

$func = strtolower(trim(str_replace("/","",$_REQUEST['rquest'])));

if((int)method_exists($this,$func) > 0)

$this->$func();

else

$this->response('',400); // If the method not exist with in this class, response would be "Page not found".

}

/*************API SPACE START*******************/

private function about(){

if($this->get_request_method() != "POST"){

$error = array('status' => 'WRONG_CALL', "msg" => "The type of call cannot be accepted by our servers.");

$error = $this->json($error);

$this->response($error,406);

}

$data = array('version' => '0.1', 'desc' => 'This API is created by Blovia Technologies Pvt. Ltd., for the public usage for accessing data about vehicles.');

$data = $this->json($data);

$this->response($data,200);

}

/*************API SPACE END*********************/

/*

Encode array into JSON

*/

private function json($data){

if(is_array($data)){

return json_encode($data, JSON_PRETTY_PRINT);

}

}

}

// Initiiate Library

$api = new API;

$api->processApi();

?>

现在最后配置.htaccess

在放置api.php和Rest.inc.php的同一文件夹中创建一个名为.htaccess的文件

RewriteBase /

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-s

RewriteRule ^(.*)$api.php?rquest=$1 [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(.*)$api.php [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} -s

RewriteRule ^(.*)$api.php [QSA,NC,L]

现在调用你的API

localhost/about

其中约是功能.您可以动态检查函数内部是GET还是POST,并根据需要发送响应文本和代码.我完全给了你你想要的东西.

考虑到api.php和Rest.inc.php都在/中(这就是.htaccess文件中RewriteBase中的内容)

如果要将文件放在其他目录或文件夹中,例如/ beta / v1 /

将RewriteBase从/更改为/ beta / v1

注意.将.htaccess放在同一个文件夹中.

并且这两个文件位于同一目录中.该目录应放在RewriteBase中的htaccess中

如果您对上述内容有任何疑问,请与我联系.

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值