The TryingToScale PHP framework.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
tts_framework/src/classes/services/simple_rest.php

78 lines
2.8 KiB

<?php
declare(strict_types=1);
namespace tts\services;
class simple_rest {
private $http_version = "HTTP/1.1";
public function route(): array {
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = explode('/', $uri);
$request_method = $_SERVER["REQUEST_METHOD"];
return ['uri' => $uri, 'method' => $request_method];
}
// https://developer.okta.com/blog/2019/03/08/simple-rest-api-php
public function set_http_headers($content_type = "application/json; charset=UTF-8", $status_code = 200) {
$status_message = $this->get_http_status_message($status_code);
header("Access-Control-Allow-Origin: *");
header($this->http_version . " " . $status_code . " " . $status_message);
header("Content-Type:" . $content_type);
header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
}
// https://phppot.com/php/php-restful-web-service/
public function get_http_status_message($status_code): string {
return match ($status_code) {
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',
default => 'Internal Server Error',
};
}
}