Obtención de productos y categorías de la API de Mercadona.
El objetivo es conectar con la API de Mercadona y mostrar sus productos.
En la solución hay 4 proyectos:
- Proyecto MercadonaAPI.
- Worker Service: Obtiene los productos y categorías directamente de la API de Mercadona (una vez al día, porque es muy costoso) y los guarda en ficheros json.
- API: Responde a las peticiones de categorías y productos, desde los ficheros json obtenidos previamente.
- Proyecto MercadonaAPI.BlazorServer:
- Ejemplo de aplicación para ver los productos y categorías.
- Está hecha en Blazor Server y Mudblazor.
- Proyecto MercadonaAPI.Shared:
- Modelos en común a la API y los clientes.
- Proyecto MercadonaAPI.Tests
- Unit tests de la API.
Las aplicaciones web están alojadas en Azure:
- MercadonaAPI: https://mrkdna.azurewebsites.net/swagger/index.html
- MercadonaAPI.BlazorServer: https://mrkdonablazor.azurewebsites.net
Dado que sólo son pruebas de concepto, el plan de Azure es el gratuito, por lo que puede tardar unos segundos en abrirse la primera vez.
- MercadonaAPI AppSettings.json:
| Clave | Valor |
|---|---|
| BaseUrl | Url de la API de Mercadona |
| FullDBFilePath | Dirección del fichero json completo obtenido de la API |
| CategoriesFilePath | Dirección del fichero json de categorías, obtenido del completo para acelerar las consultas |
| ProductsFilePath | Dirección del fichero json de productos, obtenido del completo para acelerar las consultas |
| ActiveWorkerService | True para indicar al Worker Service que renueve el fichero completo si lleva más de un día sin actualizarse. False, no se actualiza |
- BlazorServer AppSettings.json:
| Clave | Valor |
|---|---|
| AzureBaseUriString | Url de la API de Mercadona |
| LocalBaseUriString | Url de la API local, si hemos publicado la API en nuestro IIS local. |
En BuilderExtensions.cs podemos cambiar si usamos una Url o la otra (client.BaseAddress = new Uri(options.AzureBaseUriString))
- Tests AppSettings.json:
| Clave | Valor |
|---|---|
| BaseUrl | Url de la API de pruebas. En mi caso, he subido un fichero (FullDBFile) a json.io |
| FullDBFilePath | Dirección del fichero json completo obtenido de la API |
| CategoriesFilePath | Dirección del fichero json de categorías, obtenido del completo para acelerar las consultas |
| ProductsFilePath | Dirección del fichero json de productos, obtenido del completo para acelerar las consultas |
| X-Master-Key | <API_KEY> Required (del bin en json.io) |
| X-Access-Key | <ACCESS_KEY> Required |
| X-Bin-Meta | <true / false> No required |
| X-JSON-Path | <JSON_ACCESSOR> No required |