PDF de programación - Drupal Services

<<>>
Imágen de pdf Drupal Services

Drupal Servicesgráfica de visualizaciones

Publicado el 9 de Junio del 2018
489 visualizaciones desde el 9 de Junio del 2018
2,0 MB
41 paginas
Drupal Services 

 

Agustin Casiva 

 

[email protected] 

www.42mate.com 

 
 
Intro 
 
Hoy en día las arquitecturas web son complejas, el viejo y sencillo modelo LAMP está prácticamente 
obsoleto. Hoy en día el ecosistema es muy diverso, debemos integrar aplicaciones (feeds, twits, 
facebook, otros sitios), tenemos diversos clientes (celulares, tablets, televisores, browsers, otros 
sitios). Desde el backend la cosa no es muy diferente, tenemos diversos backends de datos (MySQL, 
Redis, Memcache, ElasticSearch, Solr, Otros sitios). 
 
Para poder intercomunicar todos estos productos que cumplen un rol dentro de la aplicación 
necesitamos algún canal basado en un protocolo de comunicación para lograr el intercambio de 
información.  
 
Algunos protocolos son estandares, como el protocolo de comunicación a MySQL el cual es bien 
conocido y requiere un driver para permitir la interacción el cual implementa el estándar establecido. 
Otros son específicos e implementados por la desarrolladores de la aplicación. 
 
 La forma más sencilla que tienen los developers hoy en día para crear estos canales de comunicación 
específicos para sus aplicaciones son los Web Services. Basándose en un protocolo bien conocido de 
comunicación, por ejemplo HTTP, montan sus servicios aceptando datos de entrada y devolviendo 
información del sistema en algún formato fácilmente procesable por otro sistema (XML, Json, CSV, 
etc). Existen diferentes tipos de servicios web, SOAP, REST, XML­RPC entre otros, pero sin dudas los 
más prácticos y más controversiales hoy en día son los servicios REST. 
 
La filosofía de los servicios REST es reutilizar toda la infraestructura de la World Wide Web y el 
protocolo HTTP para interconectar aplicaciones. En criollo, asi como pedimos una página web 
diciendo  
 
https://www.google.com.ar/?gfe_rd=cr&ei=CkGIVq6AKsqB8Qemj7XYCQ&gws_rd=ssl#q=rest  
 
y este devuelve una página web con la información legible para humanos, la idea es que podamos 
hacer la misma petición pero obtener la información en un formato legible por un sistema asi el 
mismo puede procesarla y hacer lo que necesite con la misma.  
 
De la misma forma, enviando peticiones http poder impactar cambios en el estado sistema remoto. 

 
Estas URLs que expone el sistema remoto se conocen como endpoints, y el conjunto de endpoints se 
conoce como la API del sistema remoto. 
 
La controversia viene de la mano que REST establece cómo deben realizarse estas peticiones y la 
forma en que deben implementarse los endpoints para que tengan un sentido común para la API que 
provee el sistema remoto. Muchas veces como desarrolladores no seguimos adecuadamente estas 
reglas y se generan discusiones de lo mal o bien que hicimos nuestra API. Un mal diseño de una API 
puede traer problemas serios si nuestro sistema crecerá en endpoints, si crecerá el número de 
developers que desarrollaran la API y si crece el número de clientes que tendremos. Lo mejor será 
seguir las reglas de REST, las cuales son sencillas, desde el día 0 y estar seguro que el equipo las 
conoce a la hora de extender y mantener la API. 
 
Entonces, antes de comenzar con APIs REST deberían tener bien claro 
 

● El protocolo HTTP, verbos, urls, headers, codigos de respuesta 
● Cómo usar HTTP para hacer REST 
● Autenticación y Autorización 
● Seguridad 

 
Un buen libro para conocer estas cosas es "Build APIs You Won’t Hate" escrito por Phil Sturgeon. 
 
Y Drupal ? 
 
Drupal provee un conjunto de módulos muy prácticos para implementar APIs REST en nuestros Web 
Sites basados en Drupal los cuales aseguran que sigamos estos lineamientos y que sea muy fácil 
hacerlo. Asi y todo, puedo dar fe como algunos developers lo hacen mal de todos modos, pero si te 
preocupa hacerlo bien, Drupal te la hace muy fácil. 
 
El principal módulo es Services, este módulo provee casi todo lo necesario para implementar servicios 
web bien implementados relativamente fácil. Services es agnóstico al protocolo a usar, que conozca 
posee soporte para SOAP, XML­RPC y REST, solo debemos instalar los servers que son módulos 
adicionales que corren sobre services y realizar la integración de los mismos. Yo solo he trabajado con 
REST asi que hablaré de este Server. 
 
Por otro lado, un gran problema de los servicios REST es la autenticación y la autorización. Existen 
varias formas de validar quién es el que realiza las peticiones (Autenticación) y si puede o no realizar 
la acción y/o consultar los datos (Autorización). Existen protocolos para hacer este proceso y también 
hay muchas discusiones sobre cual es la mejor forma de hacerla. El mecanismo más conocido por 
estos días es Oauth2 el cual es un protocolo para autenticar y autorizar servicios web basándose en 
tokens. No soy un experto en Oauth2 pero trataré de explicar aquí lo necesario para que lo integren 
en su Drupal. Existe un módulo que provee soporte para Oauth2 a los endpoints expuestos por 
Services llamado intuitivamente Oauth2. 

 
De aquí en más trataré de explicarles cómo configurar los módulos, les mostraré como realizar 
autorizaciones y autenticaciones, como implementar nuevos endpoints y como usar herramientas 
para probar sus endpoints. 
 
Instalación de Módulos 
 
Partiremos desde una instalación limpia de Drupal con un profile por defecto. 
 
Descargaremos los módulos 
 

Services 
Libraries 
Chaos Tools 
Entity API 
Entity Reference 
X Autoload 

­
­
­
­
­
­
­ OAuth2 Server 

 
Vamos a habilitar 
 

● Services 
● REST Server 
● OAUTH2 Server 
● Libraries 

 
Libraries necesita la libreria ​https://github.com/bshaffer/oauth2­server­php​, hay que bajar la ultima 
versión, descomprimir y ponerla en el directorio libaries.  
 
Con esos módulos habilitados ya estamos para comenzar a configurar los servicios. 
 
Configurando el Servicio 
 
Para comenzar a configurar el servicio debemos ir a Structure > Services, ahi veremos una pantalla 
como esta, iremos a Add para añadir una API nueva. 
 

 

 

Para crear necesitaremos completar este formulario 
 

Primero nos pide el machine name, un identificador para la API. 
Nos pide elegir un server, solo habilitamos REST. 
Path al endpoint, de aquí se desprenden todos los recursos que definamos para la API, es básicamente 
el prefix para las urls que definimos. 
 
Luego si queremos podemos tildar debug el cual nos dejará información en el dblog. 
Por último nos pide autenticación, podemos usar basada en session (usando la cookie de session de 
PHP) o basada en Oauth2. Ambas funcionan y tienen sus pro y cons, veremos ambos casos, por ahora 
para hacerlo simple dejaremos sin autenticación. 
 

Una vez creado lo tendemos en la lista de services que definimos, observe que podemos crear varios 
tipos de services, ideal para manejar diferentes versiones de nuestra API o para soportar diferentes 
tipos de Web Services (SOAP, XML­RPC, etc). 
 

En Edit Resources podremos habilitar o deshabilitar los recursos disponibles en este service. 
 
Antes de avanzar veamos que hay en la solapa Server 

 

.

 

 
 
En esta podemos definir, para el server REST, qué response formats soportaremos (como serán las 
respuestas) y de qué forma podemos definir los payloads de nuestras request. Como ven hay varias 
opciones disponibles (normalmente cuando hacemos algo custom no se tienen en cuenta todas estas 
alternativas), por ahora solo dejaremos disponibles las opciones basadas en json. 
 
 
 

 

Resources 
 
Los resources son las funcionalidades que implementamos para exponer a través del servicio. Cuando 
vayamos al código implementaremos resources, los resources estarán disponibles para todos los 
services, en cada service podemos habilitar o deshabilitar los ressources que expondremos a traves 
del service. 
 
Para comenzar a entender este concepto veamos los recursos que services nos trae por defecto. 
 
Por defecto, service provee resources para interactuar con los pilares de drupal, nodos, taxonomías, 
usuarios, files y algunas funciones del sistema. Probaremos habilitar algunos resources de nodos para 
probar. 
 
Si abrimos las opciones en node veremos que tenemos 
 

­
­
­
­

CRUD Operations : La base de REST, permite Crear, Leer, Updatear o Borrar un recurso individual 
Action : Sirve para hacer alguna acción en los recursos, ejemplo actualizar nodos en solr. 
Targeted actions : Sirve para hacer una acción en un recurso particular, ejemplo publicar/despublicar nodo 
Relationships : Sirve para implementar acciones siendo sugar syntactic a un recurso en particular, ejemplo 
comentarios de un nodo. 

 
El REST server automáticamente mapea estos conceptos con los verbos http, entonces, teniendo 
 
C,R,U,D,I = Create, Read, Update, Delete (CRUD) and Index requests 
A = Action 
T = Targeted action 
X = Relationship request 
 
Para entender cómo pedir cada uno de estas operaciones podemos usar las siguientes tabla.  
 
COUNT |0|1|2|3|4|N| 
­­­­­­­­­­­­­­­­­­­ 
GET   |I|R|X|X|X|X| 
­­­­­­­­­­­­­­­­­­­ 
POST  |C|A|T|T|T|T| 
­­­­­­­­­­­­­­­­­­­ 
PUT   | |U| | | | | 
­­­­­­­­­­­­­­­­­­­ 
DELETE| |D| | | | | 
­­­­­­­­­­­­­­­­­­­ 
 
Count se refiere a la cantidad de elementos en el path, por ejemplo, para el resource news en nuestro caso el path es 
demo/api/v1/news​, hasta ahí es el recurso y el count es 0. Si ahora decimos ​demo/api/v1/news/223​, el count sera 
de 1 y 233 es el nid de la news. Si fuese una targeted action podría ser ​demo/api/v1/news/233/unpublish​, el count 
es 2 y unpublished será usado para saber que targeted action usar, caso similar sería si fuese una relationship 
request. 

 
En resumen, que para poder pegar a un recurso index debemos usar GET. Para actualizar un recurso 
debemos usar PUT, para borrar un recurso debemos usar DELETE. Para realizar una acción sobre node 
debemos usar POST. Para realizar una targeted action debemos usar POST. Lo único que nos falta 
saber es la url del endpoint a utilizar. 
 

 

 
Por ahora, en resources, habilitemos retrieve e index. Ambos podrán ser utilizados
  • Links de descarga
http://lwp-l.com/pdf11727

Comentarios de: Drupal Services (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad