Si estás leyendo este artículo, probablemente ya estés familiarizado con las posibilidades que se abren al utilizar la API (Interfaz de programación de aplicaciones).
Al agregar una de las muchas API públicas a su aplicación, puede ampliar la funcionalidad de esta aplicación o complementarla con los datos necesarios. Pero, ¿qué pasa si has desarrollado una característica única que quieres compartir con la comunidad?
La respuesta es simple: necesitas crea tu propia API.
Si bien esto puede parecer una tarea desalentadora al principio, en realidad es bastante simple. Le mostraremos cómo hacer esto con Python.
Lo que necesitas para empezar
El desarrollo de API requiere:
Pitón 3;
Frasco — un marco simple y fácil de usar para crear aplicaciones web;
Frasco-REPOSO es una extensión para Flask que le permite desarrollar una API REST rápidamente y con una configuración mínima.
La instalación se realiza mediante el comando:
pip install flask-restful
Recomendamos una programación intensiva gratuita para principiantes: Desarrollo de bots de Telegram en C# — 26 al 28 de agosto. Un intensivo gratuito que te permitirá comprender cómo funcionan los robots auxiliares, las características de trabajar con la API de Telegram y otros matices. Los tres mejores participantes recibirán 30 rublos de Skillbox.
Para comprender completamente la tarea, comprendamos los dos términos mencionados anteriormente.
¿Qué es el DESCANSO?
REST API (Representational State Transfer) es una API que utiliza solicitudes HTTP para intercambiar datos.
Las API REST deben cumplir ciertos criterios:
Arquitectura cliente-servidor: el cliente interactúa con la interfaz de usuario y el servidor interactúa con el backend y el almacén de datos. El cliente y el servidor son independientes, cualquiera de ellos se puede reemplazar por separado del otro.
Sin estado: no se almacenan datos del cliente en el servidor. El estado de la sesión se almacena en el lado del cliente.
Capacidad de almacenamiento en caché: los clientes pueden almacenar en caché las respuestas del servidor para mejorar el rendimiento general.
¿Qué es CRUD?
CRUD es un concepto de programación que describe cuatro acciones básicas (crear, leer, actualizar y eliminar).
En la API REST, los tipos de solicitud y los métodos de solicitud son responsables de acciones como publicar, obtener, colocar y eliminar.
Ahora que hemos abordado los términos básicos, podemos comenzar a crear la API.
Desarrollo
Creemos un repositorio de citas sobre inteligencia artificial. La IA es una de las tecnologías de más rápido crecimiento en la actualidad y Python es una herramienta popular para trabajar con IA.
Con esta API, un desarrollador de Python puede aprender rápidamente sobre la IA e inspirarse con nuevos logros. Si el desarrollador tiene ideas valiosas sobre este tema, podrá agregarlas al repositorio.
Comencemos importando los módulos necesarios y configurando Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
En este fragmento, Flask, Api y Resource son las clases que necesitamos.
Reqparse es una interfaz de análisis de solicitudes Flask-RESTful... También necesitará el módulo aleatorio para mostrar una cita aleatoria.
Ahora crearemos un repositorio de citas sobre IA.
Cada entrada del repositorio contendrá:
identificación digital;
el nombre del autor de la cita;
cita.
Como este es solo un ejemplo de aprendizaje, almacenaremos todas las entradas en una lista de Python. En una aplicación real, lo más probable es que utilicemos una base de datos.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "The business plans of the next 10,000 startups are easy to forecast: " +
"Take X and add AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "The development of full artificial intelligence could " +
"spell the end of the human race… " +
"It would take off on its own, and re-design " +
"itself at an ever increasing rate. " +
"Humans, who are limited by slow biological evolution, " +
"couldn't compete, and would be superseded."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "I visualize a time when we will be to robots what " +
"dogs are to humans, " +
"and I’m rooting for the machines."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "The pace of progress in artificial intelligence " +
"(I’m not referring to narrow AI) " +
"is incredibly fast. Unless you have direct " +
"exposure to groups like Deepmind, " +
"you have no idea how fast — it is growing " +
"at a pace close to exponential. " +
"The risk of something seriously dangerous " +
"happening is in the five-year timeframe." +
"10 years at most."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "I have always been convinced that the only way " +
"to get artificial intelligence to work " +
"is to do the computation in a way similar to the human brain. " +
"That is the goal I have been pursuing. We are making progress, " +
"though we still have lots to learn about " +
"how the brain actually works."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "People worry that computers will " +
"get too smart and take over the world, " +
"but the real problem is that they're too stupid " +
"and they've already taken over the world."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "It seems probable that once the machine thinking " +
"method had started, it would not take long " +
"to outstrip our feeble powers… " +
"They would be able to converse " +
"with each other to sharpen their wits. " +
"At some stage therefore, we should " +
"have to expect the machines to take control."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Artificial intelligence will reach " +
"human levels by around 2029. " +
"Follow that out further to, say, 2045, " +
"we will have multiplied the intelligence, " +
"the human biological machine intelligence " +
"of our civilization a billion-fold."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Nobody phrases it this way, but I think " +
"that artificial intelligence " +
"is almost a humanities discipline. It's really an attempt " +
"to understand human intelligence and human cognition."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "We're making this analogy that AI is the new electricity." +
"Electricity transformed industries: agriculture, " +
"transportation, communication, manufacturing."
}
]
Ahora necesitamos crear una clase de recurso Quote que definirá las operaciones de nuestros puntos finales API. Se deben declarar cuatro métodos dentro de la clase: obtener, publicar, poner, eliminar.
Comencemos con el método GET.
Le permite obtener una cotización específica especificando su ID, o una cotización aleatoria si no se especifica ninguna ID.
class Quote(Resource):
def get(self, id=0):
if id == 0:
return random.choice(ai_quotes), 200
for quote in ai_quotes:
if(quote["id"] == id):
return quote, 200
return "Quote not found", 404
El método GET devuelve una comilla aleatoria si el ID contiene el valor predeterminado, es decir al llamar, el ID del método no estaba configurado.
Si está configurado, entonces el método busca entre comillas y encuentra la que contiene el ID dado. Si no se encuentra nada, se muestra el mensaje "Cotización no encontrada, 404".
Recuerde, el método devuelve un estado HTTP de 200 si la solicitud fue exitosa y 404 si no se encontró la entrada.
Ahora creemos un método POST para agregar una nueva cotización al repositorio.
Obtendrá la identificación de cada nueva cotización a medida que escriba. Además, POST utilizará reqparse para analizar los parámetros que irán en el cuerpo de la solicitud (autor y texto de la cita).
def post(self, id):
parser = reqparse.RequestParser()
parser.add_argument("author")
parser.add_argument("quote")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
return f"Quote with id {id} already exists", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201
En el código anterior, el método POST aceptó un ID de cotización. Luego, usando reqparse, recuperó el autor y la cita de la solicitud, almacenándolos en el diccionario de parámetros.
Si ya existe una cotización con el ID especificado, el método muestra el mensaje apropiado y el código 400.
Si aún no se ha creado una cita con el ID especificado, el método crea una nueva entrada con el ID y el autor especificados, así como otros parámetros. Luego agrega una entrada a la lista ai_quotes y devuelve una entrada con una nueva cotización junto con un código 201.
Ahora creamos un método PUT para cambiar una cotización existente en el repositorio.
El método PUT, similar al ejemplo anterior, toma un ID y una entrada y analiza los parámetros de cotización usando reqparse.
Si existe una cotización con el ID especificado, el método la actualizará con los nuevos parámetros y luego generará la cotización actualizada con el código 200. Si aún no hay una cotización con el ID especificado, se creará un nuevo registro con el código 201.
Finalmente, creemos un método DELETE para eliminar una cita que ya no es inspiradora.
def delete(self, id):
global ai_quotes
ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id]
return f"Quote with id {id} is deleted.", 200
Este método toma el ID de la cotización como entrada y actualiza la lista de ai_quotes utilizando la lista compartida.
Ahora que hemos creado todos los métodos, todo lo que tenemos que hacer es simplemente agregar el recurso a la API, establecer la ruta y ejecutar Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
¡Nuestro servicio REST API está listo!
A continuación, podemos guardar el código en el archivo app.py ejecutándolo en la consola con el comando:
python3 app.py
Si todo está bien, obtendremos algo como esto:
* Modo de depuración: activado
* Que se ejecuta en 127.0.0.1:5000/ (Presione CTRL+C para salir)
* Reiniciando con estadística
* ¡El depurador está activo!
* PIN del depurador: XXXXXXX
Probando la API
Una vez creada la API, es necesario probarla.
Esto se puede hacer usando la utilidad de la consola curl o el cliente REST de Insomnia, o publicando la API en Rapid API.
Publicando nuestra API
RapidAPI es el mercado más grande del mundo con más de 10 API (y alrededor de 000 millón de desarrolladores).
RapidAPI no solo proporciona una interfaz única para trabajar con API de terceros, sino que también le permite publicar rápida y fácilmente su propia API.
Una vez que el servicio API esté publicado en Heroku, puede agregarlo a Rapid API. Aquí documentación detallada sobre este tema.
1. Cree una cuenta RapidAPI.
Registramos una cuenta gratuita; esto se puede hacer usando Facebook, Google, GitHub.
2. Agregue API al panel de control.
3. A continuación, ingrese información general sobre su API.
4. Después de hacer clic en "Agregar API", aparece una nueva página donde puede ingresar información sobre nuestra API.
5. Ahora puede ingresar manualmente los puntos finales de la API o descargar archivo de arrogancia utilizando OpenAPI.
Bueno, ahora necesitas configurar los puntos finales de nuestra API en la página Puntos finales. En nuestro caso, los puntos finales corresponden al concepto de CRUD (obtener, publicar, poner, eliminar).
A continuación, debe crear un punto final GET AI Quote que muestre una cotización aleatoria (si el ID es el predeterminado) o una cotización para el ID especificado.
Para crear un punto final, debe hacer clic en el botón "Crear punto final".
Repetimos este proceso para todos los demás puntos finales de API. ¡Eso es todo! ¡Felicitaciones, ha publicado su API!
Si todo va bien, la página API se verá así:
Conclusión
En este artículo, repasamos el proceso de creación de nuestro propio servicio API RESTful en Python, junto con el proceso de publicar la API en la nube de Heroku y agregarla al directorio RapidAPI.
Pero en la versión de prueba solo se mostraron los principios básicos del desarrollo de API; no se consideraron matices como la seguridad, la tolerancia a fallas y la escalabilidad.
A la hora de desarrollar una API real, hay que tener todo esto en cuenta.