json api erstellen?
Hallo weiß jemand wie ich eine api erstellen kann die so aufgebaut ist wie https://nekos.life/api/neko? Oder hat jemand ein Tutorial wie ich so eine api erstellen kann?
Ich verstehe deine Frage nicht. Du willst eine Schnittstelle zur API machen? Von deiner Software aus?
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.
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.
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}
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
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')
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.
weißt du zufällig wie ich dann auch nem random array anstatt der Zahl anzeigen kann?
Wenn ich das aber mache wird mir folgenes angezeigt:
35, "Ben"=>37, "Joe"=>43); echo json_encode($age); ?>
weißt du zufällig wieso?
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