Inventory and Orders API for .NET C# and MySQL
Código de ASP.NET Core y MySQL que no puede vender de más la última unidad, repetir un cambio ni desbordar sus conexiones a la base de datos.
- .NET SDK
- C#
- ASP.NET Core
- EF Core
- MySql.EntityFrameworkCore
Capturas de pantalla
Pago único
- 999 INR+ GST al pagar
- 19 US$
- Descárgalo desde tu biblioteca en cuanto se confirme tu pago.
- Incluye todas las versiones futuras de este proyecto, sin costo adicional.
- Última versión
- 1.0.0 · 6 nov 2026
- Licencia
- Source Code Licence
Descripción general
El código fuente completo de una API de inventario y pedidos en ASP.NET Core, EF Core y MySQL: categorías, productos, movimientos de stock y pedidos, con 20 endpoints. Dos compradores no pueden llevarse la última unidad, un reintento no puede repetir un cambio y una ráfaga de peticiones no puede desbordar las conexiones a la base de datos. Funciona en tu propio equipo en seis pasos.
La mayoría de los ejemplos de inventario funcionan hasta que dos personas compran la última unidad en el mismo instante, un cliente reintenta tras perder una respuesta o una ráfaga de tráfico llega a la base de datos. Inventory and Orders API for .NET C# and MySQL es el código completo para esos momentos, con resultados de ejecuciones reales contra MySQL 9.7.
Qué hace la API
- Categorías y productos. Busca, filtra, ordena y pagina productos, archívalos y restáuralos, y lista los que están en su nivel de reposición o por debajo.
- Stock. Registra entregas y correcciones, con el historial completo de cada cambio en cada producto.
- Pedidos. Crea un pedido y después complétalo o cancélalo. Al cancelarlo, el stock vuelve.
- 20 endpoints y 2 comprobaciones de estado. Un archivo
.httptrae una petición para cada endpoint, y Scalar añade documentación interactiva en Development.
Hecha para los momentos que rompen una demo
- Dos compradores, una última unidad. Una sola sentencia bloquea la fila, comprueba la cantidad y toma el stock. De dos pedidos enviados en el mismo instante, uno recibió
201 Createdy el otro409 Conflict. - Un reintento no puede repetir un cambio. Los pedidos y los cambios de stock aceptan un
Idempotency-Key. El mismo pedido enviado dos veces devolvió el mismo pedido, y el stock se tomó una sola vez. - Una ráfaga no puede terminar el proceso. Con el pool predeterminado de
MySql.Data, 150 peticiones a la vez a una API recién iniciada terminaron todo el proceso en 17 de 26 ejecuciones. Esta API solo deja ejecutar a la vez las peticiones que el pool de conexiones permite, y la misma ráfaga fue limpia en 8 de 8 ejecuciones. 600 pedidos enviados a la vez se crearon todos en 5,5 segundos, con el stock exacto. - Las ediciones no se pisan. Un cambio basado en una versión antigua de un producto recibe un
409, y un pedido solo se puede completar o cancelar una vez. - Respuestas claras cuando MySQL no está disponible. Los clientes reciben un
503conRetry-Aftery sin traza de pila, y la API sigue por sí sola cuando MySQL vuelve.
Una conexión a MySQL cuidada
- Cifrada. La configuración usa
SslMode=Required, el README explica cómo pasar aVerifyFully, fuera de Development, la app avisa al arrancar si no comprueba el servidor. - Privilegios mínimos. Una cuenta para la API, que solo puede leer y cambiar filas, y otra para las migraciones.
- Límites de tiempo en el servidor. De forma predeterminada, una sentencia espera como máximo 5 segundos por un bloqueo de fila y un
SELECTse ejecuta como máximo 30 segundos. Están en el servidor porque las llamadas asíncronas deMySql.Datano se detienen enCommandTimeout. - Reintentos que funcionan. El proveedor de Oracle no trata ningún error de MySQL como temporal si no está en una lista. Este código los enumera y empieza cada reintento con una conexión limpia.
- Migraciones como paso aparte. Cinco migraciones de EF Core crean las cinco tablas, y la app nunca se migra sola.
Código sobre el que construir
- Estructura clara. Minimal APIs con una carpeta por funcionalidad, en una solución con proyectos separados para la API y los datos.
- Compilaciones estrictas. Las advertencias son errores, los analizadores recomendados están activados y todas las versiones de paquetes están en un solo archivo.
- Errores coherentes y registros seguros. Todos los errores usan el formato problem details, los registros son JSON fuera de Development y la contraseña nunca llega a ellos.
- Secretos fuera del código.
.envpara el MySQL local, user-secrets en desarrollo y una variable de entorno en todo lo demás.
Lo que no incluye
Es el código de la API y nada más, para que sepas qué añadir:
- Sin interfaz. Responde JSON.
- Sin inicio de sesión. Pon delante tu propia autenticación o tu gateway.
- Sin proyecto de pruebas. Los resultados de arriba vienen de ejecutarla contra MySQL, no de pruebas automáticas incluidas en el archivo.
- Sin alojamiento. Cómo la despliegas depende de ti, y el README indica lo que el código espera del lugar donde se ejecuta.
Ponla en marcha en seis pasos
- Crea las contraseñas locales.
- Inicia MySQL con Docker Compose.
- Da a la API y a las migraciones sus propias cuentas.
- Crea las tablas.
- Guarda la cadena de conexión.
- Inicia la API y abre su documentación.
El README trae todos los comandos, para macOS y Linux y para PowerShell. How to Set Up and Run the Inventory and Orders API (se abre en una pestaña nueva) (en inglés) muestra cada paso con lo que debe imprimir. Se probó desde una copia limpia en macOS, en zsh y en PowerShell 7.
Cómo se construyó
La serie gratuita de tutoriales en 5 partes How to Connect a .NET C# Web API to a MySQL Database (se abre en una pestaña nueva) (en inglés) explica la conexión, las migraciones, la lectura y escritura de datos, las transacciones y los bloqueos, y la lista de comprobación para producción que hay detrás de este código.
Serie de tutoriales gratuita
How to Connect a .NET C# Web API to a MySQL Database
¿Prefieres aprender construyéndolo? Esta guía gratuita y paso a paso en nuestro blog muestra cómo se hace el proyecto.
Qué te llevas
Todo lo que hay en el archivo, de un vistazo.
- La versión 1.0.0 del código fuente completo: una solución de .NET 10 con un proyecto de API y otro de datos
- 20 endpoints para categorías, productos, stock y pedidos, más comprobaciones de estado de liveness y readiness
- Cinco migraciones de EF Core que crean las cinco tablas de MySQL
- Pedidos que no pueden vender de más la última unidad, e Idempotency-Key en pedidos y cambios de stock
- Un límite de peticiones simultáneas según el pool de conexiones, más un límite por cliente y un límite de tamaño de petición
- Una estrategia de reintentos y límites de tiempo en el servidor, hechos para el proveedor de MySQL de Oracle
- Un compose.yaml que ejecuta MySQL 9.7 para desarrollo, y un .env.example
- Un archivo .http con una petición para cada endpoint, y documentación de Scalar en Development
- Un README con los comandos de instalación para macOS, Linux y PowerShell, todos los ajustes y qué hacer antes de producción
Construido con
Los entornos y las versiones exactos con los que se creó y se probó.
- .NET SDK10.0.403
- C#14
- ASP.NET Core10.0.14
- EF Core10.0.14
- MySql.EntityFrameworkCore10.0.12
- MySql.Data26.10.0
- Scalar.AspNetCore2.19.0
- dotnet-ef10.0.14
- MySQL9.7.4
- Docker Compose5.6.1
Qué contiene el archivo
El árbol de carpetas que obtienes al descomprimirlo.
inventory-orders-api-dotnet-csharp-mysql/
- src/
- .editorconfig
- .env.example
- .gitattributes
- .gitignore
- compose.yaml
- Directory.Build.props
- Directory.Packages.props
- dotnet-tools.json
- global.json
- README.md
Qué necesita de ti
Las cuentas y los servicios que espera encontrar, para que nada te sorprenda.
- El SDK de .NET 10
- Docker Compose, con Docker Desktop u otra instalación, para el MySQL local
- Un servidor MySQL para producción: se probó con MySQL 9.7 LTS en Docker, no con un servicio gestionado
- Tu propio inicio de sesión o gateway antes de exponerla a algo en lo que no confíes, porque la API es abierta
- Un alojamiento que reinicie el proceso si termina: un handshake TLS bloqueado hace que MySql.Data lance una excepción que ningún código puede capturar
- Opcional: VS Code o Visual Studio
Versiones
Todas las versiones hasta ahora, de la más reciente a la más antigua.
1.0.0Más reciente
Primera versión del código fuente completo.
- Una API de inventario y pedidos en ASP.NET Core y MySQL, con 20 endpoints para categorías, productos, stock y pedidos.
- Dos compradores no pueden llevarse la última unidad, y una petición repetida con el mismo Idempotency-Key no repite el cambio.
- Una ráfaga de peticiones espera su turno en lugar de desbordar las conexiones a la base de datos.
- Cuentas de MySQL con privilegios mínimos, una conexión cifrada, migraciones de EF Core y un README que te lleva del archivo a la API en marcha.
Source Code Licence
Qué puedes hacer con él
What you may and may not do with the source code you buy.
Leer la licencia completa
- What this licence covers
This licence governs every file included in a product you buy from Dewiride Store: source code, configuration, database scripts, sample data, documentation and any other file in the download. It takes effect when your payment is confirmed and applies to every release of that product that reaches your library. Files that reach your library through an annual updates membership are governed in exactly the same way.
It forms part of the Terms of Sale and Use. Where a product page states different or additional licence terms for that product, those terms prevail for that product. The membership page may likewise state different or additional licence terms for the files a membership carries, and those terms then prevail for those files.
- The licence we grant you
We grant you a perpetual, worldwide, non-exclusive, non-transferable licence to use, reproduce, adapt, translate and modify the files, and to include the result in your own work, on the conditions set out below.
Perpetual means it does not expire. Worldwide means it is not limited to any country. Non-exclusive means we license the same product to other customers. Non-transferable means you cannot pass it on to someone else.
The licence is granted to you — either you personally, or the organisation you identified when buying. Everyone working within that organisation may use the files for that organisation’s projects. Nobody outside it may.
- What you may do
- Use and change the files in your own projects, commercial or otherwise, with no limit on the number of projects.
- Build a product or a service on them and charge your own customers for it.
- Deploy the result for a client, as part of work you are doing for that client.
- Distribute the result in compiled, deployed or otherwise non-source form.
- Keep as many back-up copies as you reasonably need.
- Study, observe and test how the code works, and obtain the information you need to make it work with your own software.
The last two are yours by law under sections 52(1)(aa) to (ac) of the Indian Copyright Act, 1957, and nothing in this licence is intended to take them away.
- What you may not do
- Resell, sublicense, redistribute or publish the files themselves, in whole or in substantial part, in source form.
- Include them in a template, starter kit, course, tutorial repository or component library that you sell or give away, where the code is the thing being supplied.
- Share your account, your download links or your invoices with anyone outside your organisation.
- Publish the files in a public repository, or in any other place where they can be obtained without buying them.
- Remove or obscure the copyright and attribution notices in the source files.
- Use the files to build something whose main purpose is to compete with Dewiride Store as a supplier of the same code.
The distinction that matters is simple: you may sell what you build with the code; you may not sell the code.
- Third-party components
Our products depend on open-source libraries, frameworks and services that we did not write. Those remain under their own licences, which we do not and cannot change. Where a product includes or requires such a component, its licence is named in the product’s documentation, and complying with it is your responsibility.
- Releases
Every release of a product you own is covered by this same licence and appears in your library at no extra cost. A release you have already downloaded remains licensed to you even if we later stop publishing the product. A release that reached your library through an annual updates membership is licensed to you on these same terms, and stays licensed after the period that carried it has ended.
- Ownership
We keep ownership of the files and of the copyright in them. You own whatever you create with them: your changes, your additions and the product you build are yours.
- If this licence ends
This licence ends if you materially breach it and do not put the breach right within thirty days of us asking you to in writing. It also ends if your payment is reversed or refunded, because the purchase it depends on no longer stands. Where a membership period is refunded or reversed, the licence ends for the releases that period carried and for nothing else: anything you bought separately, or that another period carried, is unaffected.
If it ends, you must stop using the files and delete the copies you hold. Work you had already delivered to a client before that point may continue in use, so that ending this licence never breaks something your own customer relies on.
- No warranty beyond the description
The warranties and limits in section 19 and section 20 of the Terms of Sale and Use apply to this licence as well.
- Governing law
This licence is governed by the law of India, and section 24 of the Terms of Sale and Use applies to any dispute about it. If a translation and the English version differ in meaning, the English version governs.
Inventory and Orders API for .NET C# and MySQL
- 999 INR+ GST al pagar
- 19 US$