Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
RestAPI oder vergleichbares
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

RestAPI oder vergleichbares

beantworten | zitieren | melden

Verwendetes Datenbanksystem: MySQL (MariaDB)

Hallo zusammen,
aktuell greife ich auf eine entfernte Datenbank zu. Ich würde gerne davon weg kommen und suche aufgrund dessen eine Alternative.
Jetzt habe ich öfters gelesen, dass eine RestAPI dafür gut sein soll. Auf der Suche via Google bin ich auf RestSharp gestoßen.

Kann jemand RestSharp empfehlen oder empfiehlt generell etwas anderes als eine RestAPI?

Liebe Grüße
Sascha
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.117
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

RestSharp ist nur die Client Seite.
Damit kannst du später an die eigentliche Rest API andocken.
Was du brauchst ist eine Web API.
Auch dazu gibt es eine gute Dokumentation bei Microsoft.

Einstieg:
ASP.NET Web APIs | Rest APIs with .NET and C#

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.909
Herkunft: Düsseldorf

beantworten | zitieren | melden

Für den Client kenne ich noch Refit - macht das alles sehr viel einfacher


Und als kleiner Hinweise:
ASP.NET != ASP.NET Core
Letzteres ist der Nachfolger
Viele alte Blogs oder Foren-Fragen gehen nur auf ASP.NET ein, daher ist es nützlich, den Unterschied zu kennen.
Der Link von T-Virus ist aber korrekt, obwohl da nur ASP.NET steht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.390

beantworten | zitieren | melden

Hier im Forum (auch hier) leider schon oft falsch referenziert worden (Ja, nicht ganz einfach, Microsoft Namen halt).
Aber hier die Übersicht:

> ASP.NET ist die Marke
> ASP.NET WebAPI ist ein (eingestelltes) Produkt in der ASP.NET Familie. Wird in den Dokus nur noch aus historischen Gründen so bezeichnet.
> ASP.NET Core ist das Framework, in das u.a. auch das ehemalige Produkt "WebAPI" integriert wurde (schon seit MVC 1.0!).
Zitat von T-Virus
Was du brauchst ist eine Web API.
Habs schon paar mal hier im Forum gesagt, aber an der Stelle hier passt auch ganz gut.

Web API ist ein Microsoft Produkt, keine Technologie in dieser Ausdrucksweise.
Was er braucht trägt den Namen "HTTP API", nicht zwangsweise "Web API"; wobei "REST API" dann die Implementierung durch Angabe des Standards davon wäre.

Bei Namen darf man durchaus exakter sein als bei anderen Dingen, weil das schon weitreichende Folgen haben kann, wenn man da was verwechselt / falsch angibt.

PS: ob eine REST API, eine GraphQL API oder eine gRPC API die besse Wahl der Implementierung wäre, dafür fehlen die Informationen des Thread-Erstellers.
Alle drei haben ihre Existenzberechtigung, ihre Vorteile und Nachteile.
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,
vielen Dank für eure Hilfestellungen, die haben mich schon etwas voran gebracht.

Aktuell habe ich es hinbekommen, dass Daten per URL angezeigt werden. Allerdings als array object und nicht als JSON.

Hat jemand von euch die Daten aus einem Array weiter verarbeitet?

Ich habe es mit JObject versucht, da ich zuerst dachte die Daten würden als JSON weitergegeben werden.


var client = new RestClient("https://daustausch.heinrich-luebke-schule.de/ReadAPI/faecher");
                var request = new RestRequest(Method.GET);
                

                IRestResponse restResponse = client.Execute(request);

                string response = restResponse.Content;
                var jObject = JObject.Parse(restResponse.Content);

                string fachID = jObject.GetValue("id").ToString();
                string fach = jObject.GetValue("fach").ToString();

                _faecher.Add(new Fach(fachID, fach));

Die Daten werden bis hier hin erfolgreich geladen:
string response = restResponse.Content;

Nachdem er es Parsen soll, sagt er das es nicht das richtige Format sei (logisch).

Ich nutze das "Slim Framework" zum Auslesen der Datenbank und Bereitstellung.
Eventuell gibt es noch eine Alternative, dass Array weiter zu verarbeiten?

Liebe Grüße und vielen Dank!
Sascha
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 438
Herkunft: Kassel

beantworten | zitieren | melden

Der Server gibt (zumindest wenn ich ihn aufrufe) kein json zurück. Auch dann nicht, wenn ich Accept: application/json mitsende.

Du müsstest im Slim Framework also dafür sorgen, dass er Json zurückgibt. In PHP gibt es dafür die Funktion json_encode.

P.S.: Du solltest gleich von anfang an darüber nachdenken, deinen Server durch Authentifizierung abzusichern.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Papst am .
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für deine Tipp!
Die Authentifizierung kommt später. Als Anfänger baue ich eins nach dem anderen aus. Es muss für mich erst die Grundfunktion klappen bevor ich es "zubaue".
Ich weiß, eine seltsame Herangehensweise, aber so lerne ich am besten.

Ich habe jetzt, mittels json_encode die Daten umgewandelt.


[url]https://api.heinrich-luebke-schule.de/api/faecher[/url]

Leider kommt der gleiche Fehler.

Wie genau prüfst du, ob die Daten als json zurück geliefert werden?

Liebe Grüße
Sascha
private Nachricht | Beiträge des Benutzers
ClaraSoft
myCSharp.de - Member



Dabei seit:
Beiträge: 55

beantworten | zitieren | melden

Hallo,

Das sieht jetzt mehr wie JSON aus, wenn ich mir das im Browser anschaue.
Versuche jetzt mal statt JObject JArray

Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ClaraSoft am .
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Das war der passende Tipp, vielen lieben Dank!
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 438
Herkunft: Kassel

beantworten | zitieren | melden

Am besten beschäftigst du dich einmal mit JSON im allgemeinen und mit dem, was .NET dir für JSON bietet.

Die von dir verwendete Json.Net Library kann dir noch eine ganze Menge manuelle Arbeit abnehmen, wenn du sie richtig bedienst.

JObject und JArray sind dabei Klassen, die du fast nicht brauchst und in deinem Fall eher eine Krücke sind und viel manuelle Arbeit machen.

https://www.newtonsoft.com/json/help/html/SerializingJSON.htm
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.117
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Und zusätzlich sei auf System.Text.Json verwiesen, was Json.NET im grunde ersetzt.
Dies ist von der Usability recht identisch, kannst du also direkt verwenden.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die vielen Tipps! Ich werde mir das ganze anschauen und mein Script entsprechend anpassen.

Ich bin aktuell bei der Authentifizierung und Autorisierung.

In C# nutze ich RestSharp.

Mit:


var client = new RestClient("http://example.com");
client.Authenticator = new SimpleAuthenticator("username", "foo", "password", "bar");

var request = new RestRequest("resource", Method.GET);
client.Execute(request);

schicke ich die Anfrage an den Server und bekommen die Info, ob die Anmeldedaten passen, zurück. Soweit verständlich.

Auf der anderen Seite nutze ich Lumen (Laravel). Dort muss ich die Daten annehmen und prüfen. Es gibt grundsätzlich bei mir keine Useraccounts. Soll ich extra eine Tabelle anlegen und mit dieser vergleichen? Macht das Sinn?

Wenn ich in RestSharp den Benutzername und das Passwort einfüge, kann das Programm nicht dennoch "ausgelesen" werden und die Zugangsdaten sind offen?

Über hilfreiche Tipps wäre ich sehr Dankbar!
Liebe Grüße und einen schönen Sonntag noch!
Sascha
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.390

beantworten | zitieren | melden

Zitat von Sascha87
Wenn ich in RestSharp den Benutzername und das Passwort einfüge, kann das Programm nicht dennoch "ausgelesen" werden und die Zugangsdaten sind offen?
Deswegen nutzt man token basierte Authentifizierung und Autorisierung, damit man primäre Informationen nicht abfangen kann.
Les dir einfach mal Tutorials dazu durch, zB die von Microsoft.
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden


Es hat sich erledigt. Post bitte löschen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Sascha87 am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.865
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Sascha87,
Zitat
Post bitte löschen.
Posts bzw. Threads werden i.d.R. nicht gelöscht, da sie ja auch für die Community interessant sein können und "gemeinsam mehr erreichen" gilt.
Wenn der Thread aber "erledigt" ist, so kannst du den Titel (via Startbeitrag editieren) mit einem [erledigt] voranstellen, damit diese deutlicher sichtbar ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 236

beantworten | zitieren | melden

Zitat von gfoidl
...
Wenn der Thread aber "erledigt" ist, so kannst du den Titel (via Startbeitrag editieren) mit einem [erledigt] voranstellen, damit diese deutlicher sichtbar ist.
...


Gibt es für Startbeiträge eine Sonderregel? Normale Antworten können Normalsterbliche nach einer gewissen Zeit nicht mehr editieren.
private Nachricht | Beiträge des Benutzers
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Es ging mir nur im meinen letzten Post und nicht um den kompletten Thread. Ich hatte ursprünglich eine Frage gestellt die sich erledigt hat.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.117
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@Sascha87
Auch in dem Fall wäre es sinnvoll gewesen die Frage zu belassen und ggf. noch die Antwort dazu zu packen.
Wenn diese zum Thema gehört, kann es u.U. auch für andere hilfreich sein um Folgeprobleme zu lösen.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers