2013-08-26 13 views
5

Mam api odpoczynku, który ma wiele parametrów za pośrednictwem ciąg kwerendy. Zastanawiam się, czy ktoś zna wzór projektu lub ma ładny sposób organizowania wszystkich parametrów (Obiekty, funkcje, tablica, json). Teraz parsuję i sprawdzam wszystkie moje parametry w tej samej funkcji, bardzo brzydki kod.Jak zorganizować parsowanie i sprawdzanie poprawności parametrów API REST?

Idealnie chciałbym w jakiś sposób obsługiwać parametry podobne do ORM bazy danych, a nawet pliku konfiguracyjnego/array/json. Jednak próbowałem wymyślić rozwiązanie tego bez powodzenia.

Każdy wgląd byłby doceniony!

Przykład moich myśli:

<?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 
    ], 
    .... 

]; 

Odpowiedz

2

Wydaje mi się, szukasz biblioteki walidacji. Moim ulubionym jest Symfony: https://github.com/symfony/validator. Wiem, że Zend Framework 2 ma również składnik sprawdzania poprawności. Nie używałem go osobiście, ale spodziewam się, że to też będzie bardzo dobre.

Przykład z readme symfony/weryfikatorów:

<?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 byłoby $_GET lub coś uzyskano parse_str itd. Możliwe jest również zdefiniowanie reguł sprawdzania poprawności w jakimś innym formacie, takie jak YAML.

Powiązane problemy