Crear una API en Azure
Hoy en día, una API es algo básico en nuestros proyectos como desarrolladores. Dicha API la podremos consumir desde lenguajes cliente como Angular, React, etc… , como en servidor, como en .NET .
A continuación, os voy a enseñar como se crean estos proyectos y como se consumen.
Para empezar, debemos elegir este proyecto a la hora de realizarlo.
Una vez creado, veremos que trae una carpeta Controllers y nada más reseñable. Empezaremos añadiendo los Nugget para nuestro proyecto, que serán estos :
A continuación, vamos a crear nuestras carpetas Models, Data y Repositories.
Sobre Models, nos vamos a crear nuestra clase, la cual irá conectada a la BBDD para traer los objetos mediante LINQ. En mi caso, serán Películas, por lo que me creo la clase Película con las siguientes propiedades:
Una vez tengamos nuestra clase, dentro de Data nos creamos nuestro Context, donde haremos una colección DbSet por clase que queramos.
Ahora, sobre Repositories vamos a crearnos nuestro repositorio donde tendremos nuestros métodos para recuperar datos, ejecutar acciones, sobre nuestros objetos que obtendremos de la BBDD. En mi caso, para este ejemplo, haré algo simple, como sacar una lista de objetos, encontrar un objeto por su identificador, modificar un objeto, añadir un objeto y eliminar un objeto. Lo que viene siendo el típico CRUD, claro está.
Inyectamos nuestro Context y nos creamos los métodos :
public class RepositoryPeliculas
{
private PeliculasContext context;
public RepositoryPeliculas(PeliculasContext context)
{
this.context = context;
}
public List<Pelicula> GetPeliculas()
{
return this.context.Peliculas.ToList();
}
public Pelicula GetPeliculaDetails(int idpelicula)
{
return this.GetPeliculas().FirstOrDefault(z => z.IdPelicula == idpelicula);
}
public int GetMaxIdPeli()
{
var max = (from datos in this.context.Peliculas
select datos.IdPelicula).Max();
return max + 1;
}
public void InsertarPelicula(string Titulo, int Duracion, string Sinopsis, string Genero, string Trailer, string Imagen, int Valoracion)
{
Pelicula peli = new Pelicula();
peli.IdPelicula = this.GetMaxIdPeli();
peli.Titulo = Titulo;
peli.Duracion = Duracion;
peli.Sinopsis = Sinopsis;
peli.Genero = Genero;
peli.Trailer = Trailer;
peli.Imagen = Imagen;
peli.Valoracion = Valoracion;
this.context.Peliculas.Add(peli);
this.context.SaveChanges();
}
public void ModificarPelicula(int IdPelicula, string Titulo, int Duracion, string Sinopsis, string Genero, string Trailer, string Imagen, int Valoracion)
{
Pelicula peli = this.GetPeliculaDetails(IdPelicula);
peli.Titulo = Titulo;
peli.Duracion = Duracion;
peli.Sinopsis = Sinopsis;
peli.Genero = Genero;
peli.Trailer = Trailer;
peli.Imagen = Imagen;
peli.Valoracion = Valoracion;
this.context.SaveChanges();
}
public void DeletePelicula(int idpelicula)
{
Pelicula peli = this.GetPeliculaDetails(idpelicula);
this.context.Peliculas.Remove(peli);
this.context.SaveChanges();
}
}
Una vez tenemos hecho el repositorio, vamos a poner en appsettings nuestra cadena de conexión a la BBDD
Una vez tenemos esto, en nuestro Startup, añadimos la cadena y ponemos nuestro repositorio y context a jugar, a la vez que habilitamos el Swagger tanto como en desarrollo como en release.
Solo nos queda un último paso hasta crearnos nuestros métodos para la API, que es irnos a la carpeta Properties, y sobre launchSettings, borramos o comentamos las líneas de Swagger.
Pues ya sobre Controllers podemos crearnos nuestro Controller (en mi caso será PeliculasController) y debe de ser de tipo API
Podemos crearnos cuatro tipo de métodos, HttpGet, HttpPost, HttpPut, HttpDelete.
Por defecto, sólo podremos tener uno o dos métodos GET (con id), pero si ponemos [Route(«[action]/{valor}»)], podremos tener tantos GET como queramos, porque cogerá el nombre del controller y el del método (esto también se aplica al PUT, POST, DELETE).
Inyectamos nuestro repositorio y creamos el método GET de una lista de películas y el GET de encontrar una película por ID.
Es FUNDAMENTAL que cuando queramos pasarle datos por parámetro, el valor que ponemos dentro de las llaves (en mi caso id), tenga el MISMO NOMBRE que el parámetro que recibe el método.
[HttpGet(«{id}»)]
public ActionResult FindPelicula(int id){…}
Para los método POST y PUT, debemos señalar que va a recibir un objeto como parámetro del método.
Al no devolver nada, y una API debe devolver una respuesta, hacemos que devuelva un Ok.
Para el Delete, siguiendo la norma de los parámetros con el mismo nombre, hacemos exactamente lo mismo, y devolvemos un Ok.
Pues bien, ya tenemos nuestra API creada. Podemos ir probándola que todo va funcionado con nuestro Localhost, y, una vez tengamos todo funcional, la subimos a nuestra cuenta de Azure para poder atacarla desde todo tipo de lenguajes.
Para poder consumirla, debemos permitir el CORS. Nos vamos a la APP Service, en la lista de la izquierda buscamos CORS y seleccionamos esta opción:
No voy a crear ninguna APP en Angular ni React, asique me apoyaré de un programa llamado Insomnia, que consume nuestra API alojada en Azure, y vais a ver que ya tenemos nuestra API funcional y que la atacamos desde AZURE.
MÉTODO GET
MÉTODO GET CON PARÁMETRO
MÉTODO POST
Para el PUT y el POST debemos enviarle el objeto como JSON
MÉTODO PUT
MÉTODO DELETE
Y ya estaría. ¡Espero que os haya aclarado las dudas y podáis realizar vuestras API’s!