PHP Classes
elePHPant
Icontem

PHP AJAX REST API 5 Call: Execute SQL queries and return JSON responses

Recommend this page to a friend!
  Info   View files Example   View files View files (59)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2018-02-16 (6 months ago) RSS 2.0 feedNot yet rated by the usersTotal: 178 All time: 8,328 This week: 466Up
Version License PHP version Categories
api5_sql2json 1.0GNU General Publi...5PHP 5, Databases, Web services, AJAX
Description Author

This package can execute SQL queries and return JSON responses.

It can take request passing a SQL query and it executes the query to return the response results encoded as a JSON string.

The package can restrict the access to query results to HTTP requests that pass an API access authorization token string value, so it can be used in browser side API HTTP requests sent via AJAX.

Requests can also be authenticated using a given password generated by the package.

The class parses the SQL string before executing to make it easy to process and eventually prevent security attacks.

The database access queries can be done to several different types of SQL databases supported by this package.

  Performance   Level  
Name: Santo Nuzzolillo <contact>
Classes: 2 packages by
Country: Venezuela Venezuela
Innovation award
Innovation award
Nominee: 1x

Details

API5

Generic SQL to JSON API RESTful for JavaScritpt Ajax Component<br>

<green>API RESTful Genérico de SQL a JSON para Componentes Ajax de JavaScript</green><br> V.0.0.1<br>

Documentacion Completa visite API5.

<br> <b>INTRODUCCION</b><br> API5 es una "interface" entre el fron-end y una base de datos SQL (para muchos base de datos es sinónimo de back-end) cuyo resultado es una estructura JSON. Podríamos decir que es una interface "SQLtoJSON" (ver ejemplo mas adelante). Ha sido programado en PHP, simplemente porque fue el lenguaje que estuvo a la mano y solo se utiliza como un medio para que JavaScript llegue, lea y opere con una base de datos relacional o RDBMS, pero en ningún momento el programador del front-end requiere elaborar un código PHP.

Definiendo PHP como el Middleware, la tendencia es que sea transparente para el propósito final de la API. (Nota: para esta versión la API ha sido probada con MYSQL y Oracle esperando pronto integrar POSTGRES y MSSQL).

<b>SOBRE MODELO-VISTA-CONTROLADOR</b><br> Si definiéramos API5 dentro del esquema MVC, diríamos que API5 sustituye el modelo de datos por la "base de datos" entera, es decir, la base de datos para que exista tuvo que ser modelada según las necesidades de las reglas de negocio, por lo que se espera que un buen diseño debe contemplar una grafica de entidad relación o algo parecido a ella. Pues este MODELO Entidad-Relación es lo que se convierte en la "M" dentro una arquitectura MVC y la forma de accederlo es a través de la API. La Base de datos bien diseñada es, en si, el MODELO de datos, no hay por que redefinirla, con solo mirar la ENTIDAD-RELACION el programador puede conceptualizar todo el modelo de datos disponible.<br> <br> <b>"SQLtoJSON"</b><br> Es decir a partir desde una Setencia SQL generar la salida en formato JSON. La tendencia de esta interface es hacer uso al máximo de las capacidades del RDBMS de una manera simple e intuitiva para los que ya conocen el lenguaje SQL. Mi recomendación para todo programador, independientemente del lenguaje que utilicen, es que deben estar familiarizados con el lenguaje SQL independientemente del RDBMS involucrado y del lenguaje de programación que dominan. Pero aun así, API5 puede permitir la creación de niveles de abstracción que permitan al desarrollador inexperto en SQL a obtener los datos requeridos desde el MODELO si el grupo de desarrollo mantiene entre sus integrantes un DBA o un conocedor del lenguaje SQL. <br>

INSTALACION

Solo debe copiar el directorio API5 en su servidor WEB y está listo para su uso, puede ser en la raíz o en un sub directorio. <br><br> Requerimientos del lado del servidor<br>

? Apache 2.2 o superior (puede ser IIS)<br>
? PHP 5.4 o superior incluido PHP 7<br>
? Dependiendo de la base de datos debe tener activo los módulos PHP acorde.<br>

Para mysql -> mysqli<br> Para oracle -> oci8<br> <br> Configuración requerida antes de su USO<br> API5 requiere de por lo menos un conector de base de datos, estos se definen en los archivos identificados como "source" ubicado en el sub-directorio /textdb. Existe un archivo llamado "default.source.json.php" el cual contiene información de como conectarse a una base de datos.<br>

Ejemplo para una base de datos MySQL:

{
  "Type"            : "MySQL",
  "DBLib"           : "MySQLi",
  "Database"        : "employees",
  "Host"            : "192.168.1.39",
  "Port"            : "3306",
  "User"            : "demo",
  "Password"        : "onlyfordemo",
  "Encoding"        : ["", "utf8"],
  "Persistent"      : false,
  "DateFormat"      : ["yyyy", "-", "mm", "-", "dd", " ", "HH", ":", "nn", ":", "ss"],
  "BooleanFormat"   : [1, 0, ""],
  "Uppercase"       : false
}

Este ejemplo servirá como base para crear otros "source". Para este caso se indica que la base de datos es MySql y DBLib es el adaptador que indica que es atreves del modulo PHP "php_mysqli"

Ejemplo para una base de datos Oracle:

{
"Type"          :"Oracle",
"DBLib"         :"OracleOCI",
"Database"      :"localhost:1521/ORCL",
"Host"          :"",
"Port"          :"",
"User"          :"user",
"Password"      :"password",
"Encoding"      :"UTF8",
"Persistent"    :false,
"DateFormat"    :["yyyy","-","mm","-","dd","","HH",":","nn",":","ss"],
"BooleanFormat" :[1,0,""],
"Uppercase"     :false
}

LISTO!!

<br> <br> <br> Consideraciones:<br>

  1) Type y DBLib son dependientes y siempre deben tener la pareja combinada. En el pasado Mysql podia utilizar dos librerías distintas, pero en la actualidad solo se utiliza "MySQLi".<br>
  2) DateFormat se sugiere ampliamente mantenerlo inalterable como en  los ejemplos. Para mysql es su formato natural para oracle es seteada de esa manera en lo interno, para estandarizar el output de los tipo de fecha.<br>
  3) Encoding UTF8 como apreciarán es algo distinto entre las dos definiciones, se recomienda considerarlos tal como están para ambos tipos.<br>

<br> Una vez modificado el archivo con los valores correspondientes a su instalación, esta listo para su uso. API5 considera mas configuraciones mas avanzadas que están descritas en la documentación.

USO BASICO

El siguiente es el uso mas primario usando todos los valores por defecto que iremos explicando <br> EJEMPLO 001:<br>

// JAVASCRIPT 
// -------------------------------------------
// TEST WITHOUT JQUERY
var data = new FormData();
data.append('SQL','select * from departments');

var xhr = new XMLHttpRequest();
xhr.open('POST','./services/api5.php',true);
xhr.onload = function(){
	//do something to response
	console.log(JSON.parse(this.responseText));
}
//Required to detect that is a XHR
xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");

xhr.send(data);
// -------------------------------------------

// JAVASCRIPT 
// -------------------------------------------
// TEST WITH JQUERY
jQuery.ajax({
	url :'./services/api5.php'
	,type :'post'
	,data : {
		SQL:'select * from departments'
	}
	,success : function(result){
		// en este caso result ya es un objeto JS
		console.log(result);
	}
	,error : function(error){
		console.log(error);
	}
});
// -------------------------------------------

RESULTADO:

{
	"HEADER":{
		"dept_no":{
			"type":3,
			"type_raw":254,
			"size":4,
			"precision":0,
			"scale":0,
			"is_null":false,
			"primary_key":true,
			"auto_increment":false
		},
		"dept_name":{
			"type":3,
			"type_raw":253,
			"size":40,
			"precision":0,
			"scale":0,
			"is_null":false,
			"primary_key":false,
			"auto_increment":false
		}
	},
	"ERROR":{
		"CODE":"0",
		"MESSAGE":"SUCCESS"
	},
	"INFO":{
		"RECORDS_COUNT":"9",
		"CURRENT_PAGENUMBER":"1",
		"CURRENT_PAGESIZE":"9",
		"DB_TYPE":"MySQL"
	},
	"DATA":[
		{"dept_no":"d009","dept_name":"CustomerService"},
		{"dept_no":"d005","dept_name":"Development"},
		{"dept_no":"d002","dept_name":"Finance"},
		{"dept_no":"d003","dept_name":"HumanResources"},
		{"dept_no":"d001","dept_name":"Marketing"},
		{"dept_no":"d004","dept_name":"Production"},
		{"dept_no":"d006","dept_name":"QualityManagement"},
		{"dept_no":"d008","dept_name":"Research"},
		{"dept_no":"d007","dept_name":"Sales"}
	]
}
  Files folder image Files  
File Role Description
Files folder imageapi5 (10 files, 5 directories)
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  api5  
File Role Description
Files folder imageapi5 (7 files, 4 directories)
Files folder imagejs (1 directory)
Files folder imageservices (7 files, 2 directories)
Files folder imagetextdb (2 files)
Files folder imagetextsql (1 file)
  Plain text file Classes.php Class Class source
  Accessible without login Plain text file Common.php Example Example script
  Accessible without login HTML file consola.html Doc. Documentation
  Plain text file db_adapter.php Class Class source
  Plain text file db_array.php Class Class source
  Plain text file db_mysqli.php Class Class source
  Plain text file db_oci8.php Class Class source
  Accessible without login Plain text file db_oracleoci.php Aux. Auxiliary script
  Accessible without login Plain text file en.txt Doc. Documentation
  Accessible without login Plain text file es.txt Doc. Documentation

  Files folder image Files  /  api5  /  api5  
File Role Description
Files folder imagejs (1 directory)
Files folder imageservices (5 files, 2 directories)
Files folder imagetextdb (2 files)
Files folder imagetextsql (1 file)
  Plain text file Classes.php Class Class source
  Accessible without login Plain text file Common.php Example Example script
  Plain text file db_adapter.php Class Class source
  Plain text file db_array.php Class Class source
  Plain text file db_mysqli.php Class Class source
  Plain text file db_oci8.php Class Class source
  Accessible without login Plain text file db_oracleoci.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  api5  /  js  
File Role Description
Files folder imagecryptojs-aes (2 files)

  Files folder image Files  /  api5  /  api5  /  js  /  cryptojs-aes  
File Role Description
  Accessible without login Plain text file aes-json-format.js Data Auxiliary data
  Accessible without login Plain text file aes.js Data Auxiliary data

  Files folder image Files  /  api5  /  api5  /  services  
File Role Description
Files folder imagecryptojs-aes (3 files)
Files folder imageJWT (1 file, 1 directory)
  Accessible without login Plain text file api5-jwt.php Example Example script
  Accessible without login Plain text file api5.php Example Example script
  Plain text file dosqlClasses.php Class Class source
  Plain text file dosqlHerachies.php Class Class source
  Accessible without login Plain text file getpage.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  api5  /  services  /  cryptojs-aes  
File Role Description
  Accessible without login Plain text file cryptojs-aes.php Aux. Auxiliary script
  Accessible without login Plain text file example-js-to-php.php Aux. Auxiliary script
  Accessible without login Plain text file example-php-to-js.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  api5  /  services  /  JWT  
File Role Description
Files folder imageFirebase (5 files)
  Accessible without login Plain text file test1.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  api5  /  services  /  JWT  /  Firebase  
File Role Description
  Plain text file BeforeValidException.php Class Class source
  Plain text file ExpiredException.php Class Class source
  Plain text file JWT.php Class Class source
  Accessible without login Plain text file openssl.php Aux. Auxiliary script
  Plain text file SignatureInvalidException.php Class Class source

  Files folder image Files  /  api5  /  api5  /  textdb  
File Role Description
  Accessible without login Plain text file default.config.php Aux. Auxiliary script
  Accessible without login Plain text file default.sources.json.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  api5  /  textsql  
File Role Description
  Accessible without login Plain text file app.logon.sql.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  js  
File Role Description
Files folder imagecryptojs-aes (2 files)

  Files folder image Files  /  api5  /  js  /  cryptojs-aes  
File Role Description
  Accessible without login Plain text file aes-json-format.js Data Auxiliary data
  Accessible without login Plain text file aes.js Data Auxiliary data

  Files folder image Files  /  api5  /  services  
File Role Description
Files folder imagecryptojs-aes (3 files)
Files folder imageJWT (1 file, 1 directory)
  Accessible without login Plain text file api5-jwt.php Example Example script
  Accessible without login Plain text file api5.php Example Example script
  Plain text file apidosql.php Class Class source
  Accessible without login Plain text file compile.php.php Aux. Auxiliary script
  Plain text file dosqlClasses.php Class Class source
  Plain text file dosqlHerachies.php Class Class source
  Accessible without login Plain text file getpage.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  services  /  cryptojs-aes  
File Role Description
  Accessible without login Plain text file cryptojs-aes.php Aux. Auxiliary script
  Accessible without login Plain text file example-js-to-php.php Aux. Auxiliary script
  Accessible without login Plain text file example-php-to-js.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  services  /  JWT  
File Role Description
Files folder imageFirebase (5 files)
  Accessible without login Plain text file test1.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  services  /  JWT  /  Firebase  
File Role Description
  Plain text file BeforeValidException.php Class Class source
  Plain text file ExpiredException.php Class Class source
  Plain text file JWT.php Class Class source
  Accessible without login Plain text file openssl.php Aux. Auxiliary script
  Plain text file SignatureInvalidException.php Class Class source

  Files folder image Files  /  api5  /  textdb  
File Role Description
  Accessible without login Plain text file default.config.php Aux. Auxiliary script
  Accessible without login Plain text file default.sources.json.php Aux. Auxiliary script

  Files folder image Files  /  api5  /  textsql  
File Role Description
  Accessible without login Plain text file app.logon.sql.php Aux. Auxiliary script

 Version Control Unique User Downloads Download Rankings  
 100%
Total:178
This week:0
All time:8,328
This week:466Up