2013-08-26 24 views
5

Sorgu dizesi üzerinden birçok parametresi olan bir dinlenme API'm var. Birinin bir tasarım desenini bilmesi veya tüm parametreleri (Nesneler, fonksiyonlar, dizi, json) organize etmenin iyi bir yolu varsa merak ediyorum. Şu anda tüm parametrelerimi aynı işlevde ve çok çirkin kodda ayrıştırarak onaylıyorum.REST API parametrelerinin ayrıştırılması ve doğrulanması nasıl yapılır?

İdeal olarak, bir veritabanına ORM veya hatta bir config dosyası/array/json'a benzer parametreleri işlemenin bir yolunu isterim. Ancak, hiçbir şans olmadan buna bir çözüm bulmaya çalıştım.

Herhangi bir fikir takdir edilecektir! düşüncelerimden

Örnek: Bir doğrulama kütüphanede aradığınız gibi

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

]; 

cevap

2

Bana kalırsa. Benim favorim Symfony'nin: https://github.com/symfony/validator. Zend Framework 2'nin de bir doğrulama bileşeni olduğunu biliyorum. Şahsen kullanmadım ama bunun da çok iyi olmasını bekliyorum. Symfony'nin/doğrulayıcı Benioku'da gelen

Örnek:

<?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$_GET veya Böyle YAML olarak başka bir biçimde doğrulama kuralları, tanımlamak da mümkündür parse_str vb elde edilen bir şey olacaktır.