Run a simple CRUD API using C# and MS SQL Server at localhost. Feel free to adapt it for your needs.
The Photo class was used to represent an image uploaded to cloud storage.
NOTE: The following was tested on Ubuntu 22.04, so adjust your instructions accordingly.
Docker Desktop
Why install multiple versions of multiple databases? Connect to local databases running in Docker!
Azure Functions Core Tools
Tested on v4.0.5198. Verify the installation:
func --version
Azure CLI
Tested on v2.57.0. Verify the installation:
az --version
Install the .NET SDK
Tested on v8.0.303. Summary of the steps:
- To remove previous versions of dotnet:
sudo apt remove dotnet* aspnetcore* netstandard*
- Install
.NET version 8:
sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0
- Verify the installation:
dotnet --list-sdks
NOTE: If you have several versions installed then you can switch between them. Create a file called global.json somewhere in your folder path and enter:
{
"sdk": {
"version": "8.0.303"
}
}
I connect to the database using DBeaver.
I use Postman to test the endpoints.
Summary of the steps:
Pull the latest SQL Server 2022 (16.x) Linux container image:
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -p 1433:1433 --name msss-container --hostname msss-host -d mcr.microsoft.com/mssql/server:2022-latest
docker exec -it msss-container /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
git clone git@github.com:scottocorp/api-dotnet-mssql-base.git
Create the database by running commands from Docker:
docker exec -it msss-container "bash" # connect to the container
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA # connect to the database
CREATE DATABASE [msss-db];
GO
exit # exit the database
exit # exit the container
Create the table by running a local script uploaded to Docker:
cd api-dotnet-mssql-base/scripts
docker cp photos.sql msss-container:/tmp
docker exec -it msss-container "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -i /tmp/photos.sql
exit
Create a file in the repository folder called local.settings.json and add the following:
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"SqlConnectionString": "Server=localhost,1433;Initial Catalog=msss-db;Persist Security Info=False;User ID=SA;Password=<YourStrong@Passw0rd>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;"
},
"Host": {
"CORS": "*"
}
}
func start
Use postman to test:
- Create a new
POSTtab and enter the following url:
http://localhost:7071/api/function_photos - select
Body -> raw -> JSON, and paste in:
{
"Filename": "xyz",
"Bearing": 1,
"Pitch": 2,
"Zoom": 3
}
Send
Other endpoints:
GET:http://localhost:7071/api/photosGET:http://localhost:7071/api/photos/<id>DELETE:http://localhost:7071/api/photos/<id>PUT:http://localhost:7071/api/photos/<id>
This is definitely a "work in progress". More work is needed to:
- Set up a test suite.
- etc
- Looking at the git history, the
initial commitcomprised boilerplate code generated with the following commands:
func init api-dotnet-mssql-base --worker-runtime dotnet-isolated --target-framework net8.0
cd api-dotnet-mssql-base
func new --name function_photos --template "HTTP trigger" --authlevel "anonymous"
See LICENSE.md.