En mi opinión, el lenguaje php siempre ha sido una solución bastante buena para crear un backend complejo de aplicaciones web, y en los noventa y cero ganó una popularidad tan inmensa (simplemente enorme, comparable a IE para la navegación web en ese momento) principalmente debido a la facilidad, velocidad de desarrollo y soporte de código. Pero esos días se acabaron. Hoy en día se cree que las aplicaciones php se han vuelto monstruosas, llevan mucho tiempo y son difíciles de ejecutar, solo pueden funcionar extrayendo muchas dependencias en el directorio / vendor ...
, , . API Node.js Go.
, API php.
Slim (https://www.slimframework.com/), / , ORM, CMS, " ".
Slim php. , , (Apache 2, Nginx ), composer, , . (cooking app):
mkdir my-slim-api && cd my-slim-api
composer init
, composer.json :
{
"name": "zhukmax/slim",
"type": "project",
"license": "MIT",
"autoload": {
"psr-4": {
"Zhukmax\\Slim\\": "src/"
}
},
"require": {}
}
, Slim, http- (PSR-7) http- (PSR-17):
composer require slim/slim:"4.*"
composer require slim/psr7
API index-, , "-", json :
<?php
require __DIR__ . '/vendor/autoload.php';
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response, $args) {
$data = array('name' => 'Max', 'role' => 'web developer');
$response->getBody()->write(json_encode($data));
return $response->withHeader('Content-Type', 'application/json');
});
$app->run();
composer.json , php-json ( – )
"require": {
"slim/slim": "4.*",
"slim/psr7": "^1.4",
"ext-json": "*"
}
MySQL
Slim , ORM. Laravel Eloquent Doctrine, NoSQL . Idiorm .
composer require j4mie/idiorm
:
<?php
ORM::configure([
// , localhost ,
// 127.0.0.1
'connection_string' => 'mysql:host=127.0.0.1;dbname=mydb',
'username' => 'root',
'password' => '124'
]);
$app->get('/users', function (Request $request, Response $response, $args) {
$users = ORM::forTable("users")->find_array();
$response->getBody()->write(json_encode($users));
return $response;
});
, url, users json-.
, ,
, , , . GET, POST, PUT DELETE http- .
<?php
$app->post('/users', function (Request $request, Response $response, $args) {
$parsedBody = $request->getParsedBody();
$user = ORM::forTable("users")->create();
$user->name = $parsedBody['name'] ?? '';
if ($user->save()) {
$successRes = $response->withStatus(201);
$successRes->getBody()->write(json_encode([
"message" => "Success"
]));
return $successRes;
} else {
$errorRes = $response->withStatus(501);
$errorRes->getBody()->write(json_encode([
"message" => "Error"
]));
return $errorRes;
}
});
, , , , . , , , , . , - ORM. Idiorm , , . API, , .
actions
index.php – , . -.
$app->get('/users/{id}', [UserController::class, "getOne"]);
Slim – action , . , -, , , . . , .
<?php
class UserController
{
public function getOne(Request $request, Response $response, $args): Response
{
$id = (int)$args['id'] ?? 0;
$user = ORM::forTable("table1")->findOne($id);
if (!$user) {
return self::errorResponse($response, 404, "Error text");
}
$response->getBody()->write(json_encode([
"id" => $user->id,
"name" => $user->name
]));
return $response;
}
private static function errorResponse(Response $response, int $code, string $text): Response
{
$errorRes = $response->withStatus($code);
$errorRes->getBody()->write(json_encode([
"message" => $text
]));
return $errorRes;
}
}
, . php API, Express, Angular - backend. , . , . , web-.
, github (https://github.com/ZhukMax/slim-api), .