PHP Rocks
POST/GET routes deklarieren? - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: PHP Programmierung (https://www.php-rocks.de/https://www.php-rocks.de/forum/1-php-programmierung.html)
+--- Forum: PHP Basics (https://www.php-rocks.de/https://www.php-rocks.de/forum/2-php-basics.html)
+--- Thema: POST/GET routes deklarieren? (/https://www.php-rocks.de/thema/375-re-post-get-routes-deklarieren-.html)



POST/GET routes deklarieren? - Till - 12.11.2019

Hallo,
als Beispiel habe ich eine
- Route [1] um assets auszuliefern
- Route [2] -> RPC API Controller

Route [1] macht eigentlich nur Sinn für GET Requests,
und Route [2] eigentlich nur für POST Requests.

Meine Frage: Sollte man trotzdem (jeweils) beide Methoden in der route deklareiren GET+POST oder das nur jeweils nötige?

Route [2] würde beispielsweise in dem einen Fall bei einem irrtümlichen GET Request einen API-Parse-Error ausliefern, und im anderen Fall (nur die POST route)
einen 404 Not found Fehler.

Danke für Eure Anregungen!

Viele Grüße
Till


RE: POST/GET routes deklarieren? - Arne Drews - 13.11.2019

Hi,

Da würden mir zwei Varianten in den Sinn kommen.
  1. Das Routing basierend auf der HTTP-Method dynamisch steuern. => Fehlerbehandlungen
  2. Das Routing trennen, sofern die Aufgaben zu stark voneinander abweichen.
Grundsätzlich tendiere ich mehr zu 1., aber dafür habe ich zu wenige Details
Shy


RE: POST/GET routes deklarieren? - Till - 14.11.2019

Hi Arne,
Zitat:Das Routing basierend auf der HTTP-Method dynamisch steuern. => Fehlerbehandlungen
Also eispiel Route [2], eine z.B. MethodNotAllowedErrorResponse vom API Controller ausliefern, oder eine extra GET Route definieren welche dasselbe tut?

Zitat:Das Routing trennen, sofern die Aufgaben zu stark voneinander abweichen.
Ich denke, da das Routing schon getrennt ist ergibt sich meine Frage? Wenn ich Dich richtig verstehe?!? Oder wie meinst Du das?

Zitat:aber dafür habe ich zu wenige Details
Die routes werden in einen Container "compiliiert" und vom "AltoRouter" implementiert:
CompiledContainer.php:
PHP-Code:
protected function get36()
    {
        return 
$this->delegateContainer->get('frdl\\web\\Router');
    }

    protected function 
get37()
    {
        return 
$this->resolveFactory(static function (\Psr\Container\ContainerInterface $c) {
    
$parsed_url = \parse_url($c->get('project')->ce_baseUrl);
    return new \
frdl\web\Router($c->get('routes'), \rtrim($parsed_url['path'], '/ '));
}, 
'frdl\\web\\Router');
    } 

Route Declarations:
PHP-Code:
<?php
use function DI\add;


return  [

    
   
'routes' => add([
                  [
'POST''/api/rpc/2.0/', [\frdl\web\Controller\RpcController::class, 'rpc'], 'rpc'],
                 
    
         ]),
        
]; 

PHP-Code:
<?php

use function DI\add;


return  [
    
    
    
 
'routes' => add([
                  [
'GET|POST|PUT''/', [\frdl\web\Controller\IndexController::class, 'action'], 'home'],
            
    
         ]),
        
]; 

PHP-Code:
<?php
use function DI\add;


 
$preferences json_decode(file_get_contents(__DIR__ .\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'preferences.json'));

 

return  [

    
   
'routes' => add([
                  [
'GET'$preferences->routes->assets->route, [\frdl\WebAssets\WebAssetsController::class, 'serve'], $preferences->routes->assets->name],
                 
    
         ]),
        
];