Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 02:42

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



API Design - Denkfehler bei Parameterabfrage

Discussion on API Design - Denkfehler bei Parameterabfrage within the Web Development forum part of the Coders Den category.

Closed Thread
 
Old   #1

 
Synatex's Avatar
 
elite*gold: 25
Join Date: Apr 2010
Posts: 1,009
Received Thanks: 316
API Design - Denkfehler bei Parameterabfrage

Hi,

bin momentan an einem kleinen Framework dran welches Leuten die Möglichkeit bietet ziemlich einfache REST API's zu bauen und wo man sich keine Gedanken über die Header, eventuelle Fehlermeldungen, das Format o.Ä. machen muss.

Bin nun nach dem Grundaufbau an nen Punkt angelangt wo ich nur bedingt weiter komme:

Als Beispiel nehmen wir die api 'user' und wollen einen finden. D.h. wir schicken ganz normal einen GET Request an die API. Per Slash ( / ) können weitere Parameter wie Suche nach ID, Namen, etc drangehangen werden. Gehen für nun mal von folgender URL aus:

PHP Code:
http://meine-api.de/user/name/Testuser/ 
Der Request-String wäre in diesem Fall:

PHP Code:
/user/name/Testuser 
Theoretisch alles klar. Die API ist vordefiniert und könnte theoretisch auch Slashes enthalten. Die Parameter sind jedoch nicht vordefiniert, haben keine bestimmte vorgeschriebene Länge und sind anderweitig auch nicht identifizierbar ausser durch die Trennung von dem Slash. Aber was ist nun, wenn im Nutzername auch Slashes vorkommen dürfen? (Was gar nicht so abwägig ist, besonders im Bereich VPN- und Tunneling). Dann würde sich das ganze so ergeben:

PHP Code:
/user/name/Test/user 
Dann hätten wir das Problem das es nun folgenden Aufbau ergeben würde:

PHP Code:
APIuser
Action
GET
Params
:
name => Test
user 
=> 
Was natürlich nicht dem entspricht was wir haben wollen. Nun war meine Idee das ganze über nen Regex zu prüfen obwohl ich hier auch wieder gegen die Wand laufe da die Parameter wie gesagt nicht genau identifizierbar sind.

Hat da einer ne Idee wie man das lösen könnte?
Synatex is offline  
Old 11/14/2013, 13:26   #2
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
einfach klassische uri queries nutzen?
Uniform Resource Identifier ? Wikipedia
Query String ? Wikipedia
tolio is offline  
Old 11/14/2013, 14:23   #3

 
Synatex's Avatar
 
elite*gold: 25
Join Date: Apr 2010
Posts: 1,009
Received Thanks: 316
Das sind ja die 'normalen' Querys, hier ging es in dem Fall ja explizit darum dass das ganze über einen String übergeben wird eben mit dem Slash als Trennzeichen.
Synatex is offline  
Old 11/14/2013, 14:25   #4


 
Whoknowsit's Avatar
 
elite*gold: 146
Join Date: May 2009
Posts: 3,764
Received Thanks: 6,973
Einzige Möglichkeit besteht darin, die Übergabe von Usernamen Urlencoded zu erzwingen. Anders geht das nämlich nicht bzw. ist sehr fehleranfällig.

Ergo:

Andererseits ginge das schon, wenn die Parameter immer /user/name/ wären. Dann müsstest du aber mit dem dahinterliegenden Code rausrücken.
Whoknowsit is offline  
Thanks
1 User
Old 11/16/2013, 21:23   #5
 
elite*gold: 34
Join Date: Feb 2012
Posts: 228
Received Thanks: 31
mod_rewrite

api.com/user/name/lala/lulu
wird zu
api.com/?param1=user&param2=name&param3=lala&param4=lulu

bzw. mein Tipp:
api.com/user$name/alter$23/legit$hax (i.ein einzigartiger String/Zeichen)
dann wieder umwandeln via mod_rewrite
dann splitten und nach Bedarf weiter verwenden

oooder bezüglich der Zeichenprobleme:
verschlüssel den Text für die API
api.com/user/awdl3wr8esiggxk/alter/adwadkg3255
und decodiere ihn im Nachinein.

Ps: ich weiß immer noch nicht, was du genau machen willst / wie du die Daten weiter verwenden willst, gibt schließlich sicher weiter mehr als 30 Lösungen
iMarkt is offline  
Old 11/21/2013, 07:34   #6
 
Mashkin's Avatar
 
elite*gold: 44
Join Date: May 2010
Posts: 2,053
Received Thanks: 1,747
Ich denke du solltest deinem API-Router "beibringen", welcher Endpunkt welche Parameter unterstützt.
Mehrere Parameter als "/key1/value1/key2/value2" zu übergeben halte ich für
  1. schwierig, weil dann genau dein Problem dabei herauskommt
  2. unnötig, da du ja ein "Objekt" meistens sowieso nur mit einem Parameter identifizierst.
    Zum Beispiel macht es ja relativ wenig Sinn, einen User über zwei Parameter zu identifizieren:
    "/api/user/id/482/name/DerNameOderSo"
    Das ist ein schlechtes Design wie ich finde, erschwert auch z.B. das Caching (die selbe Ressource ist mit verschiedenen Parameterreihenfolgen erreichbar).
Wenn du z.B. eine Suche in die API integrieren willst und dafür mehrere Suchparameter ermöglichen möchtest, solltest du das vllt. doch mit klassischen Query-Strings realisieren oder auf POST-Anfragen ausweichen.


Um bei der POST-Variante den HTTP-Verben gerecht zu werden, könntest du einen Suchvorgang als Objekt betrachten, dass erst per POST hinzugefügt und dann per GET abgerufen wird.
So funktioniert z.B. auch die epvp-Suche (der POST-Request resultiert in einer Weiterleitung zum Suchergebnis, identifiziert durch eine ID).
Mashkin is offline  
Old 11/21/2013, 07:37   #7

 
Synatex's Avatar
 
elite*gold: 25
Join Date: Apr 2010
Posts: 1,009
Received Thanks: 316
Whoknowsit hatte mir die Frage schon beantwortet. Trotzdem danke.

Quote:
Um bei der POST-Variante den HTTP-Verben gerecht zu werden, könntest du einen Suchvorgang als Objekt betrachten, dass erst per POST hinzugefügt und dann per GET abgerufen wird.
Sorry, aber ich versteh genau in diesem Punkt momentan gar nichts. Hatte weder was mit der Fragestellung zutun noch ist das in irgendeiner Weise nen Problem, da ich POST Daten generell anders empfange als die die per GET kommen.

#closereq, bevor hier noch mehr kommt >.>
Synatex is offline  
Old 11/24/2013, 19:52   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Ohhh nein, andere Leute schlagen dir Verbesserungen vor, steinigt sie!
Es gibt zwar prinzipiell keinen Anspruch darauf, dass der Thread dann zu ist, wenn du es so willst, aber da weitere Vorschläge recht wenig Sinn machen, wenn du diese nicht lesen willst, hat ein Fortbestehen Thread natürlich ebenso wenig Sinn.
Heute mal ausführlicher begründet.

#closed
MrSm!th is offline  
Thanks
3 Users
Closed Thread


Similar Threads Similar Threads
Death Note "Denkfehler"
02/22/2013 - Anime & Manga - 14 Replies
Ich dachte mir vielleicht sind anderen Leuten hier auch ein paar "Denkfehler" in Death Note aufgefallen und es würde mich mal Interessieren was das wäre. Mir ist folgendes aufgefallen. In folge 8/9 werden 2 Familien Observiert. L könnte einfach den Fernseher beider Familien anzapfen, und 2 andere Kriminelle in den Nachrichten erscheinen lassen. Wenn einer der Beiden stirbt weiß man ob Kira sich in den Reihen der Familie befindet.
[Help]Denkfehler oO?
02/02/2011 - Metin2 Private Server - 4 Replies
Hallöchen also irgendwie glaub cih hab nen denkfehler es können doch net sämtliche komishcen waffen keine zugewiesene testure haben ich hab jetzt shcon 2 schwerter eingefügt und 1paar dolche die form seh ich aba halt nur weiß warum oO ich hab die gr2 files in item reingeschmießen dazu die tga/dds datein zuerst hatt ich die bilddatein mit orginal namen rien getan
Denkfehler..
11/20/2010 - Flyff Private Server - 4 Replies
Hey, habe Problem... Habe den SQLServer angelegt und Database stehe (Offi Files Tut von Sedrika )... Aber kriege per HP keine Verbindung und weiß nicht wie ich mit v15 Client verbinden soll... Kappiere das Tut nicht Help pls x3
Pixelsearch denkfehler BITTE HILFE!
06/17/2009 - AutoIt - 4 Replies
Hab irgendwo in meinem script einen denkfehler..... ich will 2 unabhängige farben mit pixelsearch finden und die mouse zu der position bewegen mit mousemove. mit 1 pixelsearch funktioniert das auch nur mit einem 2. komm ich nicht zurecht! wär echt spitze wenn mir wer aus der patsche helfen könnte!! HotKeySet("x", "MeinExit") HotKeySet("y", "StartStop") HotKeySet("a", "Schuss")´ Global $On $On = False while 1



All times are GMT +2. The time now is 02:42.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.