HTTP GET en vereiste input variabelen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Emiel1984
  • Registratie: Maart 2005
  • Laatst online: 10-10 12:24

Emiel1984

Made in NL

Topicstarter
Goedemiddag,

Om gegevens van een server op te vragen ben ik momenteel genoodzaakt om variabelen in de URL mee te geven.

voorbeeld:
code:
1
https://www.randomlocation.com/server_services/server_service1.asmx/GetFiles?&Offset=0&size=10



Aangezien de API die ik hiervoor gebruik momenteel wordt ge-update om JSON geformatteerde data input en outputs te ondersteunen ben ik tegen een vraagstuk aangelopen tijdens het reviewen.

Bij de (HTTP) GET aanvraag zijn nog steeds de variabelen in de URL vereist om de juiste gegevens van de server te krijgen. Echter wil ik deze heel graag uit de URL zien verdwijnen. Ik zie dit liever in het JSON formaat om zodoende maar een type formaat te hoeven ondersteun in de software op de clients.

Maar bij een GET heb je helaas niet de optie op variabelen mee te geven als 'content'.
Omdat we de REST guideline willen respecteren, willen we voor een het opvragen van data ook liever geen HTTP Post uitvoeren.

Omdat ik denk dat vaker mensen tegen dit probleem zijn aangelopen hoop ik dat iemand van jullie een mij kan vertellen hoe jullie hier mee zijn omgegaan. Het belangrijkste is dat we niet willen afwijken van de REST guidelines.

Ik hoop dat ik niet te veeleisend ben :+ .

[LTS][MTS][HTS]


Acties:
  • +1 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 07-10 15:21
Bij de (HTTP) GET aanvraag zijn nog steeds de variabelen in de URL vereist om de juiste gegevens van de server te krijgen. Echter wil ik deze heel graag uit de URL zien verdwijnen.
Waarom zou je dit uit de URL willen halen? Daar zijn deze parameters juist voor bedoeld. Voor de PUT, POST en DELETE requests, kun je gewoon met een post body werken en aan de hand van de Content-Type de gegevens op de juiste manier verwerken.
Ik zie dit liever in het JSON formaat om zodoende maar een type formaat te hoeven ondersteun in de software op de clients.
En waarom precies? De request naar de API doe je normaal gesproken met een HTTP library. Een voorbeeldje in PHP:

PHP:
1
2
3
4
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://www.randomlocation.com/server_services/server_service1.asmx/GetFiles', [
    'query' => ['Offset' => 10, 'size' => 0]
]);


Ik voer hier een array met parameters aan Guzzle, en die zorgt er vervolgens voor dat de juiste URL opgebouwd wordt. Een kind kan de was doen.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Emiel1984 schreef op dinsdag 23 augustus 2016 @ 17:17:
Het belangrijkste is dat we niet willen afwijken van de REST guidelines.
Welke REST guidelines doel jij op dan?

Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Je kunt prima JSON data in een GET request duwen:
code:
1
http://server.com/path?{"offset":0,"size":10}

Het is even wennen, zeker als de browser alle curlies ge-escaped in de adresbalk toont maar het werkt prima.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • +2 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Emiel1984 schreef op dinsdag 23 augustus 2016 @ 17:17:
Het belangrijkste is dat we niet willen afwijken van de REST guidelines.
Ehh? :? Juist. JSON is niet bedoeld als vervanging voor GET request parameters (over het afwijken van standaarden trouwens...). JSON wordt gebruikt (naast bijv. XML) als response waarde en bij POST requests als payload.

Ga niet moeilijk lopen doen en gebruik gewoon GET parameters ,stukken makkelijker :)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Emiel1984
  • Registratie: Maart 2005
  • Laatst online: 10-10 12:24

Emiel1984

Made in NL

Topicstarter
Bedankt voor de snelle reacties. Even voor de duidelijkheid, de payload is wat momenteel JSON formatted wordt.

Het is me nu duidelijk geworden dat mijn vraag wat vreemd was. De methode van hoe parameters meegegeven worden is al zoals vereist is. Dus bedankt voor het verhelderen hiervan.

Edit:
Voor de mensen die in dit topic komen met dezelfde vraag..

http://www.w3.org/2001/tag/doc/whenToUseGet.html

By convention, when GET method is used, all information required to identify the resource is encoded in the URI. There is no convention in HTTP/1.1 for a safe interaction (e.g., retrieval) where the client supplies data to the server in an HTTP entity body rather than in the query part of a URI.

[ Voor 42% gewijzigd door Emiel1984 op 23-08-2016 21:27 . Reden: bron vermelding voor meer info. ]

[LTS][MTS][HTS]


Acties:
  • 0 Henk 'm!

  • merauder
  • Registratie: November 2005
  • Laatst online: 08-10 14:02
Of je data in een URI moet duwen of niet hangt ook van de gevoeligheid af. Een offset / limit is prima om 'publiek' te hebben, zodat je bijvoorbeeld ook gewoon custom feeds kan implementeren. Een username of password via GET transporteren is in principe geen goed idee, net als content overigens. Het is heel makkelijk om dan een URL te bouwen als 'HTTP://belastingdienst.nl?content=stuurgeldnaarmijnpriverekeningmetrekeningnummer12344' .

Wil je per se wachtwoorden over $_GET sturen, dan is een JWT ook wel een te overwegen optie.

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 10-10 08:54
Je kan eventueel ook JSON webtokens overwegen.

  • gron74
  • Registratie: Augustus 2011
  • Laatst online: 10-10 00:25
Je kunt prima data posten met parameters in de URL. Misschien niet goed in de ogen van REST, maar nood breekt wet :) Ik heb het in de praktijk al gebruikt. Parameter in de URL die een functie aangeeft en data in de POST body.

  • simon
  • Registratie: Maart 2002
  • Laatst online: 16:42
Waarom mag je geen params in een GET url bij een rest request gebruiken? Als jij een lijst met resources ophaalt doe je een get request, met params. Die kun je niet in je url kwijt.

|>

Pagina: 1