El futuro de la programación: Programar menos.
Tags: api, javascript, programming, discuss
Published: 2022-09-24 09:15:12

## Twillio abre la veda

El pasado 21 de septiembre Twillio publicaba la versión 9 de su SDK para Java.

Además de contener breaking changes, en la release notes se puede leer un párrafo que indica la dirección de la nueva revolución tech.

![Release notes de Twillio](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2z1bdyk4vl0czx5f6mwr.png)

>Java Helper is now auto-generated via OpenAPI with this release. This enables us to rapidly add new features and enhance consistency across versions and languages. 

## OpenAPI

Una de las revoluciones silenciosas en el mundo de la programación ha sido la aparición de OpenAPI (La versión 3 se publicó en 2017).

OpenAPI es un estándar abierto para describir APIs RESTful  especificando formalmente que define el formato de los datos que se intercambian entre el cliente y el servidor. OpenAPI se basa en JSON Schema, un tema sobre el que probablemente escriba pronto, un estándar para describir datos en formato JSON.

La principal ventaja de **OpenAPI** es que **puede autogenerarse**. Esto significa que podemos tener gratis documentación y el código clientes a partir de nuestro código backend! Además esta documentación y nuestro código se mantienen sincronizados y actualizados automáticamente.

Herramientas como readme.io son compatibles con OpenAPI y te permiten tener un portal de documentación completo a partir de la especificación de la API en segundos.

![Portal de documentación generado con readme.io](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2wexhwapzqo65chwvuc.png)

Una de las cosas que más me sorprende es que son capaces de autogenerar clientes para un montón de lenguajes!

![Listado de 15 lenguajes disponibles](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d65tipb2sfg3j9es8758.png)

## Autogenerando clientes Typescript

En el caso de Typescript lo hacen mediante un paquete llamado [api](https://api.readme.dev/docs) que hace que me explote la cabeza.

Actualmente están trabajando en la versión 5 y sospecho que va a cambiar la forma de trabajar de muchos.

Para generar el cliente typescript de una API basta con ejecutar el comando desde npx indicando la url de la spec en OpenAPI (en el momento de escribir estas lineas estaba en la beta de la versión 5.

```sh
npx api@5.0.0-beta.3 install https://api.timetime.in/v3/api-docs
```


![Resultado de la ejecución del comando](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eg2u4r4hra2l8zvuju8l.png)

Esto se descarga la especificación y genera una librería desde cero con todos los métodos de la API incluyendo los tipos de los parámetros de entrada y de los valores retornados. Además la publica en npm dentro de su namespace `@api/`

El único problema es el versionado. A día de hoy no he visto cómo se puede instalar una versión específica del cliente de una API por lo que creo que las builds no serían reproducibles.

![El package.json de la librería generada no tiene versión](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iock2meqt09z4j9ia2a1.png)

Evidentemente, al tratarse de una beta no lo he probado en producción pero creo que en unos años será el estado del arte a la hora de comunicar clientes y servidores matando a GraphQL e incluso a alternativas tan interesantes como gRPC.

En resumen: No perdais el tiempo! Autogenerad la spec de vuestra API a partir del código del servidor, autogenerad la documentación y autogenerad los SDKs y los clientes.