Estamos diagramando un WebAPI para PHP 5.2.x
La vamos a implementar sumando fuerzas entre 3 diferentes grupos de
programadores de diferentes empresas.
Aca les mando el primer borrador que generamos.
La idea es simplemente compartirlo con ustedes.
Saludos,
Mrtn
-----*
Version*
La version minima soportada sera 5.2.0 y siendo válido para cualquier
versión 5.2.x
Las mismas se mantendrán hasta la actualizacion de este estandard,
independientemente de los releases que PHP pueda proporcionar.
*Dependencias*
Cada objeto deberá implementar los mecanismos necesarios para validar en
tiempo de ejecución la presencia/ausencia de los componentes necesarios para
su normal funcionamiento.
Cada objeto deberá presentar una implementación mínima para una instalación
sin ningún componente / extensión extra. En caso de no poder realizarse
dicha implementación se deberá generar una Exception
*Namespaces y Clases*
Todas las clases deberán pertenecer a un Namespace.
Se deberá incluir en el nombre de cada clases el namespace y package,
utilizando el guión bajo ( _ ) como separador.
Tanto para nombre de Namespaces como para nombre de clases se utilizará
notacion CamelCase, a excepción de los acrónimos, los cuales serán escritos
en Mayusculas
El formato es el siguiente:
Vendor_Package_Class
Vendor_Package_SubPackage_
Class
Vendor_Package_Class_SubClass
PHP_MySQL_Class
Las clases Abstract, Interfaces, como asi también clases derivadas de
Exception deberan contar con el correspondiente sufijo.
abstract class Example_Controller_ControllerActionAbstract
interface Test_Foo_BarInterface{}
class Other_Exception_NotSupportedException extends Exception{}
*Archivos*
La ubicacion de los archivos será relativa a la ubicación del Namespace. El
archivo deberá poseer el mismo nombre (case-sensitive) que el nombre de la
clase, de manera que Test_Foo_Bar deberá estar en Test/Foo/Bar.php siendo
Test el directorio padre de todos los archivos y pudiendo éste estar en
cualquier ubicación.
El uso de require, require_once, include, include_once se encuentra
prohibido.
Cada Namespace o Package podrá proporcionar un autoload para la tarea de la
carga de las clases.
Se proporcionará un autoloader generico para la carga los archivos
iniciales. Dicho autoloader debe encontrarse en
<Namespace>/<Namespace>.php
Solo dentro de dicho archivo será válido el uso de require/include.
*Declaraciones*
Solo se permite declarar Clases o Interfaces.
No esta permitido el uso de variables globales o funciones de ningún tipo.
Se reserva el uso de las mismas para el uso de las aplicaciones
--
Martin Scotta