myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Wie kann ich eine Http API mit Auth Testbar machen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich eine Http API mit Auth Testbar machen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Chronos Chronos ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.03.2008
Beiträge: 131
Entwicklungsumgebung: VS 2019 CE
Herkunft: NRW


Chronos ist offline

Wie kann ich eine Http API mit Auth Testbar machen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

zunächst einmal, gegoogelt habe ich nach meine Fragestellung aber konkret finden konnte ich dazu bisher nix.


Ich versuche gerade mittels Http(Client|MessageHandler) eine API umzusetzen.
Sinn ist es mittels Digest Auth auf einem Server per SSL Daten abzufragen.
Das funktioniert auch schon.

Ich mache mir nun Gedanken darüber wie man die implementierten Clients UnitTestbar machen kann.
Erster Gedanke war das per HttpMessageHandler zu realisieren der im Konstruktor eines jeden Clients mitgegeben wird (evtl. auch mit Credentials).
Würde soweit auch funktionieren.
In Tests habe ich aber festgestellt das im funktionalen Einsatz unter Realbedingungen es so ist das für jede Abfrage auch automatisch eine neue Anmeldung am Server gemacht wird.
Ich wäre davon ausgegangen das dies nur beim ersten Request passieren würde und für jeden weiteren Request dann nicht mehr, da der Händler für jeden Request der selbe ist.


Jetzt bin ich beim Lesen auf den Hinweis gestoßen das man einen HttpClient am besten static haben sollte.
Drum dachte ich mir das der Client evtl. irgendwelche Sessions oder ähnliches zwischenspeichert von denen er ausgehen könnte nach der ersten Anmeldung wäre keine weiter mehr notwendig.
Aber auch bei der Implementierung mit einem static HttpClient zeichnet sich das selbe Bild ab.

Jetzt ist für mich die Frage:

#1: Ist das in diesem Fall evtl. die Implementierung/Handling am Server die/das die Auth nicht über Requests hinweg funktioniert lässt.
#2: Wenn das so ist kann ich in diesem Fall nichts daran ändern, aber um spätere größere Änderungen zu vermeiden wäre meine Frage was besser wäre?

Für jede Aktion auf der C# API einen Client oder einen Handler mitzugeben auf dem die Requests gemacht werden?
Bauchgefühl sagt Handler wegen der Testbarkeit.
Nur kann ich aufgrund mangelnder Erfahrung mit HTTP nicht abschätzen ob es equivalent wäre einen Handler oder Client mitzugeben, gerade im Bezug auf das Führen von möglichen Sessions.
Was meint ihr?
28.10.2019 15:56 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.559
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Jetzt bin ich beim Lesen auf den Hinweis gestoßen das man einen HttpClient am besten static haben sollte.

Wurde da wirklich "static" gesagt? Wenn ja ist das sehr unglücklich formuliert. Davon abgesehen war schon immer der korrekte Weg HttpClient komplett zu abstrahieren.
Das  Problem von HttpClient ist, dass dieser Ressourcen benötigt und das Initialisieren langsam ist. Deswegen gibt es mittlerweile auch die HttpClientFactory, die das Management übernimmt.
 Use HttpClientFactory to implement resilient HTTP requests Selbst initialisieren solltest am Besten lassen, wenn möglich.

Man versucht eben den HttpClient pro Endpunkt (im Sinne von API) nur einmal zu erstellen; kann aber ebenso in einem Singleton sein und eben nicht mit dem magic static.

Wenn Du ein API Client schreibst, dann empfehle ich Dir  Refit

Damit kannst Du den Client problemlos mocken und Unit-fähig umsetzen.
Der Rest wird auch in Refit unterstützt und ist gut dokumentiert.
28.10.2019 16:18 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 28.03.2020 12:39