Создание Restful API, какие заголовки должны быть выпущены перед ответом?

Я не нахожу много информации об этом, может быть, я просто искал ошибку, кто знает. Что я хочу знать или пытаюсь выяснить, какие заголовки я должен выводить для примера ответов API?

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

Я кое-что потащу за типом данных, но есть ли другие для времени, истечения срока или что-то еще, что я должен заботиться о себе?

В конечном счете, я пытаюсь создать API для приложения, которое хочу разработать, поэтому я пытаюсь найти раннее, что будет совместимо с кросс-платформой, и что нужно, поэтому я могу попытаться создать их в своем представлении о том, что будет частью стандартного DEV

Одна хорошая вещь, которую я включаю в свои заголовки ответов, – это идентификатор корреляции для отправленного запроса. Это позволяет потребителям вашего API сопоставить вопрос или потенциальную ошибку с запросом и позволить вам искать информацию, относящуюся к этому запросу.

Это, конечно же, требует, чтобы вы регистрировали информацию, связанную с идентификатором корреляции, но это оказалось очень полезным для меня.

Теперь это все, что ты хочешь.

Основной файл: 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

Создайте файл с именем .htaccess в той же папке, где вы размещаете api.php и 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 

где около – функция. Вы можете динамически проверять, является ли это функцией GET или POST внутри функции, и отправлять текст ответа и коды по мере необходимости. Я дал вам все, что вы хотите.

Учитывая, что api.php и Rest.inc.php находятся в /, (то есть в RewriteBase в файле .htaccess )

Если вы хотите поместить файлы в другой каталог или папку, например /beta/v1/

Измените RewriteBase с / на /beta/v1

Заметка. Поместите .htaccess в ту же папку.

И оба файла в том же каталоге. Каталог должен быть помещен в htaccess в RewriteBase

Если у вас возникли проблемы с пониманием вышеизложенного, дайте мне знать.