2013-08-26 7 views
5

Ho una pausa API che ha molti parametri tramite la stringa di query. Mi chiedo se qualcuno conosce un modello di progettazione o ha un buon modo di organizzare tutti i parametri (oggetti, funzioni, array, json). In questo momento sto analizzando e convalidando tutti i miei parametri nella stessa funzione, codice molto brutto.Come organizzare l'analisi e la convalida dei parametri dell'API REST?

Idealmente mi piacerebbe un modo per gestire i parametri simili a un database ORM o anche un file di configurazione/array/json. Tuttavia, ho cercato di trovare una soluzione a questo senza fortuna.

Qualsiasi intuizione sarebbe apprezzata!

Esempio dei miei pensieri:

<?php 
... 

$parameters = [ 
    // ?fields=id,name 
    'fields' => [ 
     'default' => ['id', 'name'], 
     'valid' => ['id', 'name', 'date], 
     'type'  => 'csv', // list of values (id & name) 
     'required' => ['id'], 
     'replace' => ['title' => 'name'], // if the database & api names don't match 
     'relation' => null, // related database table 
    ], 
    // ?list=true 
    'list' => [ 
     'default' => ['false'], 
     'valid'  => ['true', 'false'], 
     'type'  => 'boolean' // single value (true or false) 
     'required' => [], 
     'replace' => [], // if the database & api names don't match 
     'relation' => 'category', // related database table 
    ], 
    .... 

]; 

risposta

2

mi sembra siete alla ricerca di una libreria di convalida. Il mio preferito è Symfony: https://github.com/symfony/validator. So che Zend Framework 2 ha anche un componente di validazione. Non l'ho usato personalmente, ma mi aspetto che sia anche molto buono.

Esempio dal readme symfony/validatore:

<?php 

use Symfony\Component\Validator\Validation; 
use Symfony\Component\Validator\Constraints as Assert; 

$validator = Validation::createValidator(); 

$constraint = new Assert\Collection(array(
    'name' => new Assert\Collection(array(
     'first_name' => new Assert\Length(array('min' => 101)), 
     'last_name' => new Assert\Length(array('min' => 1)), 
    )), 
    'email' => new Assert\Email(), 
    'simple' => new Assert\Length(array('min' => 102)), 
    'gender' => new Assert\Choice(array(3, 4)), 
    'file'  => new Assert\File(), 
    'password' => new Assert\Length(array('min' => 60)), 
)); 

$input sarebbe $_GET o qualcosa ottenuto con parse_str ecc E 'anche possibile definire le regole di convalida in un altro formato, come YAML.

Problemi correlati