En php también puede ser fácil y rápido

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), .








All Articles