C# API - hämta anslutningsuppgifter

Permalänk
Medlem

C# API - hämta anslutningsuppgifter

Jag håller på med ett nytt API som kommer anropas från flera olika hemsidor (domäner) för att hämta data från respektive hemsidas databas.

Anslutningsuppgifterna till respektive hemsidas databas finns i en central databas.

Var i API't hämtar jag dessa och hur skickar jag uppgifterna vidare till databasklassen som i slutänden gör anrop mot respektive hemsidas databas?

Ska jag skapa en middleware för att fånga upp vilken domänen det är som anropar API't?
Ska jag hämta anslutningsuppgifterna i samma middleware?
Ska jag skapa en Singleton, Scoped eller Transient av databasklassen som i slutänden anropar respektive databas?
Hur ska jag skicka anslutningsuppgifterna till ovanstående databasklass?

Jag använder Dapper.

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
NVIDIA GeForce GTX 4070 12 GB
WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"

Permalänk
Medlem

Väldigt svårt att förstå hur alla delar hänger ihop och vilken funktionalitet du faktiskt frågar om.

Kan du rita upp hur hela systemet ser ut med domänerna och databaserna så blir det lättare.
https://draw.io eller liknande

Permalänk
Medlem

Jag hade nog använt "scoped" på mina tjänster - så att de lever under hela anropets livstid.

1. Anrop kommer in med id / api-nyckel
2. DB connection för att läsa upp vilken DB som detta kundId tillhör
3. Kör du entityframework så instansierar du en DBContext utifrån Kund-Id-databasen, annars kan man tänka sig en connection-property i api-servicen, som sätts i sen används
4. API anropet utförs mot rätt DB och svar returneras

Sen "dör" requesten och alla objekt

Klart man kan tänka sig en singleton DB-klass som har till uppgift att läsa upp korrekt Kund-Db

Hur som tänk på:
1. Allt ska gå över HTTPS
2. Ha API säkerhet, minst med APi-nyckel, helst Token baserat
3. Exponera inga interna funktioner utåt av misstag

Mvh Lazze

Permalänk
Medlem
Skrivet av kinkyboo:

Väldigt svårt att förstå hur alla delar hänger ihop och vilken funktionalitet du faktiskt frågar om.

Kan du rita upp hur hela systemet ser ut med domänerna och databaserna så blir det lättare.
https://draw.io eller liknande

Försökte mig på ett enkelt diagram

pelle.se gör ett anrop till API't.
API't hämtar anslutningsuppgifterna till pelle.se databas baserat på domännamnet "pelle.se".
API't hämtar/skriver mot pelle.se databas.

Blev det mer förståeligt av detta?

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
NVIDIA GeForce GTX 4070 12 GB
WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"

Permalänk
Medlem

Är det helt olika uppsättningar databaser? Isåfall låter det ju mer som du borde ha flera API.
Är det samma data-struktur så kanske du ska fundera på någon form av shard-implementation.

Permalänk
Medlem
Skrivet av Dhanjel:

Är det helt olika uppsättningar databaser? Isåfall låter det ju mer som du borde ha flera API.
Är det samma data-struktur så kanske du ska fundera på någon form av shard-implementation.

Det är exakt samma databasstruktur för samtliga, så ur API'ts synvinkel är det bara anslutningsuppgifterna som skiljer sig åt.

Hade aldrig hört talas om shard tidigare, men det kommer inte vara aktuellt.

Jag har ett annat API sedan flera år tillbaka som pratar med olika databaser och det fungerar alldeles utmärkt. Däremot är det skrivet i PHP 5.6. Det här nya C#-baserade APIt är ett mycket enklare API (färre endpoints/logik) och ska få agera som utbildningsprojekt innan jag ger mig på att skriva om det mer komplexa APIt

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
NVIDIA GeForce GTX 4070 12 GB
WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"

Permalänk
Medlem

Du kan skapa tre olika databasklasser som bygger på samma grund men har olika anslutningsuppgifter.

Sedan konfigurerar du en middleware som retunerar en av de tre databasklasserna baserat på domänen för requesten. Kolla på den här SO, liknande funktion.
https://stackoverflow.com/questions/51626224/how-to-configure...

Permalänk
Medlem
Skrivet av kinkyboo:

Du kan skapa tre olika databasklasser som bygger på samma grund men har olika anslutningsuppgifter.

Sedan konfigurerar du en middleware som retunerar en av de tre databasklasserna baserat på domänen för requesten. Kolla på den här SO, liknande funktion.
https://stackoverflow.com/questions/51626224/how-to-configure...

Det handlar inte om exakt tre hemsidor utan om X hemsidor. Därav behöver APIt hämta anslutningsuppgifterna från en databas, utöver diverse andra inställningar.

Det hela handlar om ett ganska komplext projekt med flera olika system i flera olika språk. I grunden finns ett system skrivet i Visual Basic 6

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
NVIDIA GeForce GTX 4070 12 GB
WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"

Permalänk
Medlem
Skrivet av Superfrog:

Det handlar inte om exakt tre hemsidor utan om X hemsidor. Därav behöver APIt hämta anslutningsuppgifterna från en databas, utöver diverse andra inställningar.

Det hela handlar om ett ganska komplext projekt med flera olika system i flera olika språk. I grunden finns ett system skrivet i Visual Basic 6

Då tror jag fortfarande på lösningen med en middleware som retunerar en scoped databasklass med ConnectionString baserat på vilken domän som efterfrågades.
Du kan till och med sätta upp ett litet cache system i middleware.

Permalänk
Medlem
Skrivet av kinkyboo:

Då tror jag fortfarande på lösningen med en middleware som retunerar en scoped databasklass med ConnectionString baserat på vilken domän som efterfrågades.
Du kan till och med sätta upp ett litet cache system i middleware.

Ja, det låter som en bra idé. Jag ska försöka klura ut hur jag returnerar databasklassen från en middleware och injectar den vidare till berörda kontroller/tjänster.

Just nu skapar jag databasklassen i en "bas"-kontroller, men middleware-varianten låter som en betydligt snyggare approach.

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
NVIDIA GeForce GTX 4070 12 GB
WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"