Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. APIs
Code

Construyendo tu Startup: Diseñando una API RESTful

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Running Multiple Domains
Building Your Startup With PHP: Bootstrap Your Home Page

Spanish (Español) translation by CYC (you can also view the original English article)

Final product image
What You'll Be Creating

Este tutorial forma parte de la serie Construyendo tu Startup con PHP en Envato Tuts+. En esta serie, te guío a través del lanzamiento de una startup, desde el concepto a la realidad utilizando mi aplicación Meeting Planner como un ejemplo de la vida real. En cada paso del camino, lanzaré el código de Meeting Planner como ejemplos de código abierto de los que puedes aprender. También abordaré los problemas comerciales relacionados con los inicios de la Startup a medida que surjan.

¿Por qué construir una API para tu Startup?

La razón principal por la que estoy agregando una API a Meeting Planner en este momento es para crear una base para construir una aplicación móvil iOS. La aplicación móvil utilizará la API para registrar e iniciar sesión en los usuarios y luego les permitirá programar reuniones.

Las API también tienen un efecto secundario de ayudarte a reconsiderar y organizar mejor todo el código que has escrito hasta la fecha. Ciertamente hay lugares dentro del código de Meeting Planner que se han complicado. Ahora tengo que simplificarlos de nuevo para que las aplicaciones móviles repliquen las características que están por encima de la refriega.

Puede haber otras razones en el futuro para construir la API. Por ejemplo, tal vez quiera permitir que los desarrolladores de terceros extiendan el tipo de reuniones y eventos programados por Meeting Planner, lo que les permite recopilar y compartir datos adicionales en el proceso.

Como recordatorio, todo el código para Meeting Planner se proporciona mediante código abierto y está escrito en Yii2, un Framework para PHP. Una parte importante de este episodio describe cómo usar el Framework Yii para admitir una API. Si deseas obtener más información acerca de Yii2, consulta mis series paralelas Programming With Yii2.

Antes de profundizar en el código API, me gustaría animarte a que programes tu primera reunión para que sepas de lo que estoy hablando.

Si tienes preguntas sobre este tutorial o la aplicación en sí, participo en las discusiones a continuación, y también puedes contactarme en Twitter como @lookahead_io. Siempre estoy abierto a nuevas ideas de funciones para Meeting Planner, así como sugerencias para futuros episodios de series.

Diseñando tu API

Mientras me preparaba para construir la API, había varios conceptos que necesitaba entender. Abordé algunos de estos en Programación con Yii2: Construyendo una API RESTful (Envato Tuts+).

Primero, necesitaba crear un punto final para la API donde llegarían todas las llamadas de las aplicaciones móviles. Decidí usar un tercer árbol independiente en el framework de la aplicación avanzada Yii, ejemplo: https://api.meetingplanner.io en lugar de https://meetingplanner.io/api/. Esto permite una separación limpia del código API del resto del servicio.

En segundo lugar, necesitaba diseñar seguridad en la API. En el tutorial de hoy, demostraré la seguridad simple y alfa que estamos usando, pero la fortaleceremos con el tiempo, y es probable que escriba más sobre esto en el futuro. Hay un aspecto de la seguridad en la forma en que usamos y transmitimos las claves API y las solicitudes, pero también es importante garantizar que la API aplique los protocolos de seguridad de la aplicación. Por ejemplo, un usuario no puede solicitar los participantes de una reunión si no es el organizador de la reunión o uno de sus participantes.

En tercer lugar, me gustaría preparar el código API para el control de versiones. Por ejemplo, una aplicación de iOS anterior que no se ha actualizado podría usar API v1.0, mientras que una actualización posterior se podría llamar API v2.0. Yii proporciona métodos para hacer esto, pero aún no los he implementado en el diseño actual.

En cuarto lugar, quería adaptarme lo más posible a los estándares REST. Eso es algo que he comenzado a hacer, pero requerirá más investigación para implementarlo por completo.

Finalmente, por ahora, necesitaba abordar la amplitud de funcionalidad que proporcionaría la API. Inicialmente, para el desarrollo de aplicaciones móviles, me centré en crear una funcionalidad de solo lectura. El tutorial y el código de hoy se centrarán principalmente en la funcionalidad de la aplicación de solo lectura, es decir, me mostrará las reuniones del usuario. Pero incluye el registro de usuario también. En un futuro próximo, agregaremos más funciones de escritura, como crear una reunión, agregar un participante, agregar un lugar de reunión, finalizar una invitación, etc.

Por lo tanto, considera este tutorial como el primer paso hacia una sólida API completa de servicios para nuestra aplicación.

Construyendo la API

Crear el árbol de servicio API

Building Your Startup - the API tree

Meeting Planner utiliza el framework de aplicaciones avanzadas Yii, que incluye un árbol de front-end para la aplicación y un árbol de servicios de back-end para el componente administrativo, y crearemos un tercer árbol para la API.

Anteriormente describí cómo hacerlo en Programación con Yii2: creación de una API RESTful (Envato Tuts+).

Primero, dupliqué el árbol de servicios de back-end y la configuración del entorno relacionado:

Y agregué el alias @api a /common/config/bootstrap.php:

A continuación, comenzaremos a construir la funcionalidad principal.

Asegurar la API

He creado algo de seguridad básica a medida que desarrollamos y probamos la aplicación iOS. Voy a hacer esto más robusto en el futuro.

Todas las llamadas API necesitarán conocer un app_id y app_secret. Estos se transmitirán en alguna forma de HTTPS. Sin embargo, no hay garantía de que podamos protegerlos, por lo que finalmente debemos diseñar la aplicación para que sea resistente a que se descubran estas claves.

Por el momento, he expandido el archivo mp.ini en /var/secure para incluir estos:

Luego, he creado un modelo Service.php para administrar la verificación de estas claves. A medida que lo hagamos más robusto, solo tendré que modificar una parte del código.

A continuación, configuré una BeforeAction en todos los controladores API para reutilizar el método anterior:

Las debilidades clave aquí son que las claves de seguridad se transmiten con cada llamada y los parámetros de consulta no se firman. Transmitirlos a través de HTTPS ayuda, pero no es completamente seguro. Voy a mejorar esto en el futuro.

Registro e inicio de sesión

Las únicas dos llamadas API que dependen completamente de las claves API son el registro y el inicio de sesión. Los usuarios de dispositivos móviles pueden registrarse a través de OAuth y enviarnos sus tokens de servicio OAuth, o pueden proporcionarnos su dirección de correo electrónico directamente.

Una vez recibido, a cada usuario se le entrega un token único, y este token asegura las futuras llamadas a API de ese usuario.

También tengo que hacer más para mejorar la seguridad de esto, pero tampoco lo cubriré hoy.

Aquí está el código inicial para registrar un usuario a través de la API y crear un token:

El UserToken es una cadena aleatoria única de 40 dígitos, lo que hace que sea aún más difícil de adivinar que creer que Estados Unidos elegiría a Donald Trump para dirigirlo.

El controlador de la reunión

Ahora, veamos las llamadas para un área específica de la API, solicitando información sobre las reuniones. Aquí está la parte inicial de /api/controllers/MeetingController.php:

Observa arriba cómo cada acción verifica que los tokens son correctos.

Entonces, cada llamada a la API para reuniones está estructurada de manera idéntica, como se muestra a continuación (felicita mi intento de disciplina):

Por el momento, cada llamada incluye $app_id, $app_secret y $token para el usuario que ha iniciado sesión. Cambiaré esto por seguridad en el futuro cercano. Es seguro, pero no es robustamente seguro.

Echemos un vistazo a actionList, que enumera las reuniones del usuario filtrando por el argumento $status para filtrarlas:

Eventualmente, la API puede limitar el número de solicitudes de reuniones para cada estado, es decir, mostrarme las 15 reuniones más recientes en modo de planificación por parte de este usuario.

Todos los métodos de reunión están integrados en el modelo MeetingAPI. Aquí está el código para el método meetinglist():

Primero, el método verifica que el token pertenece al usuario:

Aquí está el código para UserToken::lookup():

Luego, verificamos el filtro $status y buscamos la zona horaria del usuario mediante $timezone:

Y finalmente, consultamos una lista de las reuniones de los usuarios y las transponemos de forma manual en una matriz de objetos:

Si bien puede haber una manera más fácil de mapear los resultados de la base de datos para regresar en la API, la transposición manual de la tabla más compleja, Meeting, me permite controlar qué proporcionan los resultados de la API a los programadores. En realidad, es una oportunidad para mí para mejorar y simplificar la API sobre el código original y las propiedades de la base de datos.

Por ejemplo, hay un código que Meeting Planner debe generar subtítulos en la interfaz de usuario que no están almacenados en la base de datos. En lugar de requerir que la aplicación iOS duplique este código complejo, solo generamos el subtítulo y lo devolvemos en los resultados de la API.

Hacer llamadas de API

Aquí hay una forma preliminar de hacer y probar las llamadas API. Por ejemplo, si realizaste la siguiente llamada a la URL:

Funcionará. Pero, para probar y verlo en acción, utilicé Postman, una extensión de aplicación de Chrome, que es extremadamente útil.

Aquí te muestro cómo puedes crear una llamada API con el UX de Postman:

Building Your Startup - Postman API Requests

Y así es como se ven los resultados:

Building Your Startup - Postman API Results

Esa es solo una manera fácil de explorar el resultado sin procesar de mi servidor de desarrollo que muestra todas mis reuniones:

Eso es todo por ahora. Puedes navegar a través del lanzamiento en el árbol de la API y ver muchos de los otros métodos. A medida que actualice la seguridad y mejore la funcionalidad de la API, intentaré escribir más sobre ella.

Mirando hacia el futuro

Espero que hayas disfrutado el tutorial de hoy. Obviamente, la API crecerá y cambiará a medida que avance nuestro desarrollo móvil. Como dije antes, mejoraré la seguridad y expandiré la funcionalidad.

De nuevo, si aún no lo has hecho, ¡programa tu primera reunión con Meeting Planner ahora mismo!.

También puedes comunicarte conmigo @lookahead_io. Siempre estoy abierto a nuevas ideas de características y sugerencias de temas para futuros tutoriales. O prueba nuestro servicio de ayuda y abre un informe de error o un ticket de solicitud de función.

Estén atentos para todo esto y próximos tutoriales visitando la serie Construyendo tu Startup con PHP.

Enlaces relacionados

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.