创建Restful API应该在响应之前放置哪种标头?

编程入门 行业动态 更新时间:2024-10-25 00:33:33
本文介绍了创建Restful API应该在响应之前放置哪种标头?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我没有找到关于此的大量信息,也许我只是在搜索错误,谁知道..我想知道或试图弄清楚我应该为API响应示例输出什么类型的标题

I am not finding a whole lot of information on this, maybe I am just searching wrong, who knows.. What I want to know or try to figure out is what kind of headers should I output for API responses example

header('Content-Type: application/json');

我会为数据类型推出一些东西,但其他时间,到期时间,或者其他任何我应该关注的事情?

Is something I would put out for the type of data, but are there others for time, expiration, or anything else for that matter that I should concern myself with?

最终我试图为我想要开发的应用程序制作一个API,所以我想早点弄清楚什么是跨平台兼容的,有什么需求呢我可以尝试将它们构建成我对标准开发的一部分的想法

Ultimately I am attempting to make an API for an app I want to develope so I am trying to figure out early what will be cross platform compliant and what needs are so I can try to build them into my idea of what would be part of standard dev

推荐答案

现在这就是你想要的。

主文件: Rest.inc.php

<?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函数 api.php

<?php 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

Create a file named .htaccess in the same folder where you place api.php and Rest.inc.php

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

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

where about is the function. You can dynamically check whether it is GET or POST inside the function, and send response text and codes as required. I have given you entirely what you want.

考虑 api.php 和 Rest.inc.php 都在/中(即 RewriteBase 在 .htaccess 文件中)

Considering api.php and Rest.inc.php are both in /, (that is what in RewriteBase in .htaccess file)

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

If you want to place the files in some other directory or folder, for example /beta/v1/

将 RewriteBase 从 / 更改为 / beta / v1

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

Note. Place the .htaccess in the same folder.

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

And both the files in the same directory. The directory should be placed in the htaccess in RewriteBase

如果您对上述内容有任何疑问,请告诉我。

If you have any issues understanding the above, let me know.

更多推荐

创建Restful API应该在响应之前放置哪种标头?

本文发布于:2023-10-27 11:40:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1533249.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:哪种   Restful   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!