API Query Builders

laravel-api-query-builder

Laravel & Lumen Api Query Builder Package:

laravel-api-handler

This helper package provides functionality for parsing the URL of a REST-API request:

node-mongo-querystring

Accept MongoDB query parameters through URI queries safe and easy:

Interacción agil con REST APIs

Postman

En Chrome es la herramienta más eficiente para probar, desarrollar y documentar una API. Agil para crear solicitudes complejas, volver atrás en el tiempo y ver los resultados de una manera amigable.

HTTPie

HTTPie es un cliente HTTP que se puede usar desde la línea de comandos, parece más fácil de usar que Curl.

curl -I http://reqr.es

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Sun, 23 Nov 2014 04:44:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 10944
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"CenpWUsIvfcCYkB+PleqTA=="

Imprimir la respuesta en formato JSON amigable

curl -s http://reqr.es/api/users | xargs -0 node -e 
"console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 2))"

npm install -g json

curl -s http://reqr.es/api/users | json
{
  "page": 1,
  "per_page": 3,
  "total": 12,
  "total_pages": 4,
  "data": [
    {
      "id": 1,
      "first_name": "george",
      "last_name": "bluth",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
    },
    {
      "id": 2,
      "first_name": "lucille",
      "last_name": "bluth",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
    },
    {
      "id": 3,
      "first_name": "oscar",
      "last_name": "bluth",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
    }
  ]
}

Estilo YAML con color

npm install -g prettyjson
curl -s http://reqr.es/api/users | prettyjson

Mi favorito es underscore-cli

npm install -g underscore-cli
curl -s http://reqr.es/api/users | underscore print --color

GET

curl -is http://reqr.es/api/users
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Sun, 23 Nov 2014 05:10:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 446
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"1be-539742e1"

{"page":1,"per_page":3,"total":12,"total_pages":4,"data":[{"id":1,"first_name":"george","last_name":"bluth","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"},{"id":2,"first_name":"lucille","last_name":"bluth","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"},{"id":3,"first_name":"oscar","last_name":"bluth","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"}]}

POST

curl -is -X POST -d "name=Josoroma&job=Ninja" http://reqr.es/api/users
HTTP/1.1 201 Created
Server: nginx/1.6.2
Date: Sun, 23 Nov 2014 05:13:16 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 82
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *

{"name":"Josoroma","ob":"Ninja","id":"993","createdAt":"2014-11-23T05:13:16.017Z"}

PUT

curl -is -X PUT -d "name=Josoroma&job=Monk" http://reqr.es/api/users/2
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Sun, 23 Nov 2014 05:14:31 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 71
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *

{"name":"Josoroma","job":"Monk","updatedAt":"2014-11-23T05:14:31.618Z"}

DELETE

curl -is -X DELETE -d "name=Josoroma" http://reqr.es/api/users/2
HTTP/1.1 204 No Content
Server: nginx/1.6.2
Date: Sun, 23 Nov 2014 05:19:28 GMT
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *

Listar

curl -is http://jsonplaceholder.typicode.com/posts/1

Crear

curl -is -X POST -d "title=Heading&body=Content&userId=1" http://jsonplaceholder.typicode.com/posts

Actualizar

curl -is -X PUT -d "title=New Updated Heading&body=New Updated Content&userId=1" http://jsonplaceholder.typicode.com/posts/1
curl -is -X PATCH -d "title=New Patched Heading" http://jsonplaceholder.typicode.com/posts/1

Borrar

curl -is -X DELETE http://jsonplaceholder.typicode.com/posts/1

Filtrar

curl -s http://jsonplaceholder.typicode.com/posts?userId=1

Listar Recursos Anidados

curl -s http://jsonplaceholder.typicode.com/posts/1/comments

WordPress JSON-based REST API & Cordova

REST es un concepto de diseño. De hecho, la misma World Wide Web representa la mayor implementación de un sistema conforme al estilo arquitectónico REST.

REST no es tan rígido como SOAP. Los “RESTful web-services” utilizan URIs y métodos estándar para hacer llamadas a un “Webservice”. Por lo tanto, cuando se solicita un URI, se recibe una respuesta con la representación de un objeto, sobre el cual se puede realizar operaciones, por ejemplo: GET, PUT, POST y DELETE. Por dicha no estamos limitados a usar XML para representar datos, la opción recomendada es escoger las basadas en JSON, son muy útiles para representar datos.

JSON y XML, son “funcionalmente equivalentes”. Pero XML es considerado como demasiado detallado, y muchas veces muy difícil de analizar, por otro lado, parece más decente representar los datos usando JSON.

Crear Document Root del Dominio

sudo mkdir -p /var/www/app.josoroma.lh/htdocs

sudo chown -R josoroma:josoroma /var/www/app.josoroma.com

Bajar y descomprimir WordPress

cd /var/www/app.josoroma.lh/htdocs

wget http://wordpress.org/latest.tar.gz

tar -xvzpf latest.tar.gz --strip-components=1

Sólo porque es un Ambiente de Desarrollo

chmod -R 777 /var/www/app.josoroma.lh

Crear usuario y Base de Datos

mysql -u root -p -h localhost
CREATE USER 'josoromapp'@'localhost' IDENTIFIED BY  '***';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
 FILE, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW,
 CREATE ROUTINE, ALTER ROUTINE,
 EXECUTE ON * . * TO  'josoromapp'@'localhost' IDENTIFIED BY  '***' WITH 
  MAX_QUERIES_PER_HOUR 0 
  MAX_CONNECTIONS_PER_HOUR 0 
  MAX_UPDATES_PER_HOUR 0 
  MAX_USER_CONNECTIONS 0;

CREATE DATABASE IF NOT EXISTS  `dbjosoromapp`;

GRANT ALL PRIVILEGES ON  `dbjosoromapp` . * TO  'josoromapp'@'localhost';

Configuración básica con Apache

sudo su

vi /etc/apache2/sites-available/app.josoroma.lh.conf
<VirtualHost *:80>
        ServerName app.josoroma.lh

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/app.josoroma.lh/htdocs

        <Directory /var/www/app.josoroma.lh/htdocs/>
                Options FollowSymlinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Mapear el Host a una IP

127.0.0.1       app.josoroma.lh

Habilitar el “VirtualHost”

a2ensite app.josoroma.lh.conf

Agregar Mod Rewrite y reiniciar Apache

sudo a2enmod rewrite

service apache2 reload

WordPress Coding Standards para Sublime/phpcs

mkdir ~/.gitvendor

# idiotic path
git clone git://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git ~/.gitvendor/wordpress/coder_sniffer/WordPress

ls -la .gitvendor/wordpress/coder_sniffer/WordPress

cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

ln -s ~/.gitvendor/wordpress/coder_sniffer/WordPress WordPress
phpcs -i

The installed coding standards are WordPress, PEAR, PHPCS, PSR1, Drupal, Zend, Squiz, PSR2 and MySource

Para tener acceso a un API tan confortable como el de:

WordPress.com

existen varias opciones, las que parecen interesantes de escarbar son las siguientes:

Que una instalación de WordPress ofrezca un REST API basado en JSON es muy importante porque permite que otras aplicaciones conversen con este API para solicitar información, por ejemplo, mediante un Web Service desde la otra aplicación. Esta otra aplicación puede ser una App de teléfono Android o IOS, creada con una solución como PhoneGap-Corodova. Además se puede negociar con el API para crear, actualizar o borrar “cosas”.

En combinación con AngularJS-Ionic se puede jugar bastante con APIS externos. Las implicaciones son muy interesantes y parece que bastante capitalizables con soluciones desde juegos hasta buscadores mezclados con Mapas para nichos como Bienes Raíces, Turismo, Profesionales, Autos, por mencionar algunos.

Por favor consulte:

<VirtualHost *:80>
        ServerName app.josoroma.lh

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/app.josoroma.lh/htdocs

        <Directory /var/www/app.josoroma.lh/htdocs/>
                Header set Access-Control-Allow-Origin "*"
                Options FollowSymlinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ejemplo de una solicitud utilizando HTTP-GET:

/posts: {
    supports: [
        "HEAD",
        "GET",
        "POST"
    ],
    meta: {
        self: "http://app.josoroma.lh/api/posts"
    },
    accepts_json: true
},
/posts/: {
    supports: [
        "HEAD",
        "GET",
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
    ],
    accepts_json: true
}