├── .gitignore ├── LICENSE ├── README.md ├── autoload.php ├── composer.json └── src └── SimpleAPI.php /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | Tests/ 3 | vendor/ 4 | composer.phar 5 | composer.lock 6 | test.php -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 digitalstars, Kirill Minovsky , Anton Kolobov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SimpleAPI 2 | 3 | ## Подключение 4 | ```composer require digitalstars/simple-api``` 5 | 6 | ## Как с этим работать 7 | Скрипту обязательно должен приходить параметр module с названием модуля. 8 | * Первый параметр - название модуля 9 | * Остальные параметры - необходимые данные. Если в функции params поставить ? перед параметром, то он считается необязательным 10 | * В массив answer добавляются необходимые данные для фронта. В конце выполнения кейса, библиотека автоматически вызывает деструктор и данные в json формате отправляются фронту. 11 | * если вам удобнее передавать много данный в json формате, то передавайте чистый json вместе с модулем в тело POST запроса 12 | * breake в кейсах ставить не надо, будет и без них нормально работать. Если не нравится инспекции в IDE о пропущенном break, то просто выключите его 13 | * если в answer передать массив, он автоматически конвертируется в json 14 | * OPTIONS запросы игнорируются(полезно если, запросы идут от react/vue/etc) 15 | * есть метод error, в который передается текст. Этот метод завершает скрипт и возвращает на фронт json вида: 16 | ```{"error":"ваш текст"}``` 17 | 18 | * Если не указать хотя бы один из необходимых параметров, то вернется json: 19 | ```{"error":"missed params"}``` 20 | 21 | ## Пример №1 Обычное использование 22 | GET Запрос: 23 | ```site.ru/api.php?module=auth&login=admin&password=admin``` 24 | 25 | ```php 26 | module) { 32 | case 'auth': 33 | $data = $api->params(['login', 'password']); //если одного из параметров не будет, скрипт завершится с error 34 | $api->answer['auth'] = ($data['login'] == 'admin' && $data['password'] == 'admin'); 35 | } 36 | ``` 37 | Ответ в json: 38 | ```{"auth" : true}``` 39 | 40 | 41 | ## Пример №2 Использование необязательных параметров 42 | GET Запрос: 43 | ```site.ru/api.php?module=reg&login=admin&password=admin&name=Fedor``` 44 | 45 | ```php 46 | module) { 52 | case 'auth': 53 | $data = $api->params(['login', 'password', '?name']); 54 | if(isset($data['name']])) { 55 | $api->answer['status'] = true; 56 | $api->answer['info'] = ['login' => $data['login'], 'password' => $data['password']]; 57 | } else 58 | $api->answer['status'] = false; 59 | } 60 | ``` 61 | Ответ в json: 62 | ```{"status" : true, "info":{"login":"admin", "password":"admin"}}``` 63 | 64 | ## Пример №3 использование функции error 65 | GET Запрос: 66 | ```site.ru/api.php?module=reg&login=admin&password=admin&age=10``` 67 | 68 | ```php 69 | module) { 75 | case 'auth': 76 | $data = $api->params(['login', 'password', 'age']); 77 | if($data['age'] < 18) 78 | $api->error('Извини, но тебе меньше 18 лет'); 79 | } 80 | ``` 81 | Ответ в json: 82 | ```{"error" : "Извини, но тебе меньше 18 лет"}``` 83 | 84 | 85 | ## Пример №4 передача json 86 | Как видите, никакого различия в коде по сравнению с 1 примером 87 | GET Запрос: 88 | ```site.ru/api.php?module=auth&json_data={"login":"123","password":"123"}``` 89 | 90 | ```php 91 | module) { 97 | case 'auth': 98 | $data = $api->params(['login', 'password']); 99 | $api->answer['auth'] = ($data['login'] == 'admin' && $data['password'] == 'admin'); 100 | } 101 | ``` 102 | Ответ в json: 103 | ```{"auth" : false}``` 104 | 105 | 106 | ## Пример №5 Передача данных через json 107 | POST Запрос: 108 | ```site.ru/api.php``` 109 | Тело запроса: 110 | ```{"module":"auth", "login":"admin", "password":"admin"}``` 111 | 112 | ```php 113 | module) { 119 | case 'auth': 120 | $data = $api->params(['login', 'password']); //если одного из параметров не будет, скрипт завершится с error 121 | $api->answer['auth'] = ($data['login'] == 'admin' && $data['password'] == 'admin'); 122 | } 123 | ``` 124 | Ответ в json: 125 | ```{"auth" : true}``` 126 | -------------------------------------------------------------------------------- /autoload.php: -------------------------------------------------------------------------------- 1 | =7.0", 18 | "ext-json": "*" 19 | }, 20 | "autoload": { 21 | "psr-4": { 22 | "DigitalStars\\": "src/" 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/SimpleAPI.php: -------------------------------------------------------------------------------- 1 | data = $_POST + $_GET; 17 | 18 | if (!isset($this->data['module'])) { 19 | $this->data = json_decode(file_get_contents('php://input'), 1); 20 | if ($this->data != null) { 21 | if(!isset($this->data['module'])) { 22 | $this->error('missed module'); 23 | } 24 | } else 25 | $this->error('json invalid'); 26 | } 27 | $this->module = $this->data['module']; 28 | } 29 | 30 | public function __destruct() { 31 | header('Content-Type: application/json'); 32 | if (isset($this->answer['error'])) 33 | http_response_code(501); 34 | if (is_callable($this->destruct_func)) 35 | call_user_func($this->destruct_func, $this->answer); 36 | exit(json_encode($this->answer, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); 37 | } 38 | 39 | public function error($text) { 40 | $this->answer['error'] = $text; 41 | exit(); 42 | } 43 | 44 | public function params($params) { 45 | if(!$this->flag) { 46 | $this->flag = 1; 47 | if ($this->array_keys_exist($params)) 48 | return $this->data; 49 | else 50 | $this->error('missed params'); 51 | } else 52 | exit(); 53 | } 54 | 55 | private function array_keys_exist($keys) { 56 | foreach ($keys as $key) { 57 | if ($key[0] == '?') 58 | continue; 59 | if (!array_key_exists($key, $this->data) | !isset($this->data[$key])) 60 | return false; 61 | } 62 | return true; 63 | } 64 | } 65 | --------------------------------------------------------------------------------