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

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

  header('Content-Type:application / json'); 
</ code> </ pre>

我会针对数据类型推出一些内容,但还有其他时间,过期或其他任何我应该关注的事项吗? </ p>

最终我正在尝试为我想要开发的应用程序创建一个API,所以我想早点弄清楚什么是跨平台兼容的,有什么需求,所以我可以尝试构建 他们进入了我对标准dev </ p>
</ div>的一部分的想法

展开原文

原文

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?

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

dqol6556
dqol6556 Content-Type:application/json完全有效,足以说出它的JSON数据。
4 年多之前 回复
dpfln86244
dpfln86244 最终的结果计划有多种格式,首先运行,但我会使用JSON,因为这更符合我的整体需求,我计划在未来扩展它
4 年多之前 回复
dp926460
dp926460 目前我正在使用codeigniter,因为这是我最熟悉的,但它像我过去尝试使用的大多数框架都没有直接放出标题,这些标题必须全面兼容才能说JSON响应。所以我最终只想弄清楚除了内容类型之外我应该期望输出的最小值。
4 年多之前 回复
drjmrg8766
drjmrg8766 Content-type仅定义返回时数据的格式。API“应该”响应没有任何特定格式。REST-api可以返回JSON,XML,HTML,甚至是什么。许多API甚至可以以多种格式返回数据,让调用者决定最适合他/她的内容。所以就像@Federico说的......这取决于。
4 年多之前 回复
dtkvlj5386
dtkvlj5386 我应该说“这取决于”?
4 年多之前 回复
dongyixun0634
dongyixun0634 您在询问需要哪些HTTP响应标头吗?这太宽泛了,请尝试阅读相关的RFC。为什么重新发明轮子而不使用可以为您处理此问题的库/框架?
4 年多之前 回复

2个回答

Now this is all you want.

Primary file: 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 Functions in file 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();
?>

Now finally configure .htaccess

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]   

Now call your API like

localhost/about

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.

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

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

Change the RewriteBase from / to /beta/v1

Note. Place the .htaccess in the same folder.

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.

dro60731
dro60731 请把它作为一个新问题提出来,分享你的研究,以便我能更好地帮助你。
接近 3 年之前 回复
douhao8456
douhao8456 例如,如果我需要在我的rest api中使用php SDK,需要require(“setup.php”)或require_once(“setup.php”)那么在这个api.php中应该添加哪些? 我尝试在require_once下面添加这个(“Rest.inc.php”); 但这不起作用。
接近 3 年之前 回复
dongxing2302
dongxing2302 请详细说明你的问题。
接近 3 年之前 回复
douchun5976
douchun5976 如果我需要在这个api.php中包含一些其他.php文件怎么办? 应该怎么做?
接近 3 年之前 回复



我在响应标头中包含的一件好事是发送请求的相关ID。 这允许您的API的使用者将问题或潜在错误与请求相关联,并允许您查找与该请求相关的信息。</ p>

当然,这需要您记录信息 与相关ID相关联,但事实证明它对我非常有用。</ p>
</ div>

展开原文

原文

One good thing that I include in my response headers is a correlation id for the request that was sent. This allows consumers of your API to correlate a question or a potential bug with a request and allow you to look up information pertaining to that request.

This, of course, requires you to log information associated to the correlation id but it has proven to be very useful for me.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐