json api erstellen?

anonymjskdj12  05.07.2021, 15:15

Ich verstehe deine Frage nicht. Du willst eine Schnittstelle zur API machen? Von deiner Software aus?

BwIok 
Fragesteller
 05.07.2021, 15:17

na ich habe einen ftp server und will dort eine api erstellen die vom grundprinzip so wie die da oben ist(halt mit anderen Inhalt)

3 Antworten

Kommt drauf an, was die API können soll.

Einfache Dinge sind mit so ziemlich allem möglich und - klar - nicht sehr kompliziert.
So oder so brauchst Du aber erst Mal entsprechende Kentnisse in der Programmiersprache und musst grob wissen, wie Web-Services arbeiten.

Sobald mehr als nur stumpfes JSON Abrufen dazu kommt, solltest Du dich bei den großen Web-API-Frameworks für die jeweilige Programmiersprache umschauen, die nehmen meist viel Arbeit ab und liefern vor allem eine gewisse Grund-Qualität und Sicherheit.
Gerade beim Thema Sicherheit halte ich es für grob fahrlässig, es selber basteln zu wollen, das geht nie gut.

Für C# wäre das ASP.NET - das Neue, oft auch ASP.NET Core genannt.
C#-Bücher gibt's viele, ich kann "Visual C# 2012" oder den kostenpflichtigen Nachfolger "Visual C# 2019" empfehlen. Das erklärt auch noch viel drum herum, wie z.B. Datenbanken oder Desktop-Anwendungen.
Für ASP.NET Core solltest Du die Doku von Microsoft lesen, die ist sehr gut. Stelle dich aber darauf ein, dass der Weg steinig ist, Microsoft liefert eine hervorragende Grundlage für Web-APIs aller Art, setzt dafür aber das Verständnis einiger Prinzipien und der fortgeschrittenen C#-Grundlagen voraus. Die werden in der Doku zwar erklärt, sind für einen Einsteiger aber nicht leicht zu verstehen, daher solltest Du zumindest bei den Prinzipien auch andere Quellen betrachten. David Tielke auf YouTube hat z.B. sehr gute Videos dazu gemacht.
Die Prinzipien wären z.B. DependencyInjection/Container oder MVC, beides sind Grundbausteine von ASP.NET, werden aber auch in vielen anderen Bereichen genutzt. Es gibt noch mehr, doch die sind die Wichtigsten.

Und nein, Tutorials empfehle ich nicht, die taugen nichts.

Woher ich das weiß:Berufserfahrung

Das geht in quasi allen modernen Programmiersprachen, du solltest spezifisch nach denen schauen die dich interessieren oder schon kannst und für deinen Anwendungsfall sinnvoll sind.

Es gibt nicht den einen wahren Weg. Mit JavaScript (NodeJs) oder go-lang geht so was in wenigen Zeilen Code.

C# asp.net (Core) wäre auch eine Lösung, allerdings direkt deutlich umfangreicher, aber dafür nimmt es einem eventuell auch sehr viel ab.

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops

Ziemlich einfach - z.B. mit php

<?php
$age = array("Peter"=>35, "Ben"=>37, "Joe"=>43);

echo json_encode($age);
?>

Statt HTML gibst du einfach den JSON String aus - ansonsten wie ne normale Webseite, dh. du kannst via POST und GET Informationen annehmen und verarbeiten...

Das betreffende Beispiel würde dies ausgeben:

{"Peter":35,"Ben":37,"Joe":43}
Woher ich das weiß:Berufserfahrung – Systemadministrator mit langjähriger Erfahrung

BwIok 
Fragesteller
 05.07.2021, 15:43

Wenn ich das aber mache wird mir folgenes angezeigt:
35, "Ben"=>37, "Joe"=>43); echo json_encode($age); ?>
weißt du zufällig wieso?

0
BwIok 
Fragesteller
 05.07.2021, 15:47
@BwIok

ok nvm habe es selbst herausgefunden xD

1
BwIok 
Fragesteller
 05.07.2021, 16:15

weißt du wie ich das auch mit ner richtigen json machen kann damit es auch mit anderen scripts geht da die von json apis lesen

0
TW1920  05.07.2021, 16:19
@BwIok

Was meinst du? Wenn die Seite nur das JSON zurück gibt, dann kann jedes andere Script das JSON parsen und die Informationen weiterverarbeiten...

0
BwIok 
Fragesteller
 05.07.2021, 16:21
@TW1920

wie genau kann ich dann die Seite nur als JSON zurück geben?

0
BwIok 
Fragesteller
 05.07.2021, 17:02
@TW1920

Ja aber beim Beispiel will es nicht gehen

0
BwIok 
Fragesteller
 05.07.2021, 17:35
@TW1920

Ich habe einen Python Skript der eben auch mit der oben genannten api geht und der sagt mir halt als error das es keine json ist aber er ja json brauch

0
BwIok 
Fragesteller
 05.07.2021, 17:35
@BwIok

Ich könnte dir später noch den Code senden

1
BwIok 
Fragesteller
 05.07.2021, 17:46
@TW1920

request = await session.get('https://bs.mintimpuls.org/api/test.php') # Make a request

     nekojson = await request.json() # Convert it to a JSON dictionary

     embed = discord.Embed(title="Neko!", color=discord.Color.random()) # Create embed

     embed.set_image(url=nekojson['Name']) # Set the embed image to the value of the 'link' key

     embed.set_footer(text=f"{data['neko'][0]} mal genutzt")

     await ctx.send(embed=embed)

also kann gut sein das die Website gerade nd geht

0
BwIok 
Fragesteller
 05.07.2021, 18:45
@BwIok

Traceback (most recent call last):

 File "/home/pi/.local/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 902, in invoke

   await ctx.command.invoke(ctx)

 File "/home/pi/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 864, in invoke

   await injected(*ctx.args, **ctx.kwargs)

 File "/home/pi/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 94, in wrapped

   raise CommandInvokeError(exc) from exc

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: text/html; charset=utf-8', url=URL('https://bs.mintimpuls.org/api/test.php')

0
TW1920  05.07.2021, 19:46
@BwIok

Da die Seite aktuell nur nen 404 zurück gibt, ist es natürlich logisch, dass Python nen Fehler wirft. Statt JSON wird ein 404 HTML-Error Template ausgegeben...

0
BwIok 
Fragesteller
 05.07.2021, 19:47
@TW1920

Versuchs mal nochmal

0
TW1920  05.07.2021, 20:27
@BwIok

An sich das JSON wird nun ausgegeben... Und kann auch erfolgreich geparst werden.

Probier mal:

import json
import requests
from requests.structures import CaseInsensitiveDict

url = "https://bs.mintimpuls.org/api/test.php"

headers = CaseInsensitiveDict()
headers["Accept"] = "*/*"

resp = requests.get(url, headers=headers)

print(resp.status_code)

respj = json.loads(resp)

print(respj["Name"])

Hab grad kein Python Env da, sollte allerdings klappen.

0