Archief - De koffiepauzehoek

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Moto

Legacy Member
zijn hier mensen met verstand van Spring, normaal werk ik er wel graag mee, maar soms ben ik al dat geconfigureer zo beu, voelt heel log en omslachtig aan
Als het snel en simpler kan zonder Spring, dumpen die handel :)
Doe redelijk wat .Net en nog nooit een DI framework gebruikt. Tightly coupled code FTW

TheCrow7

Legacy Member
profound zei:
On another note; zijn hier mensen met verstand van Spring, normaal werk ik er wel graag mee, maar soms ben ik al dat geconfigureer zo beu, voelt heel log en omslachtig aan :angry:
En ik zit met een probleem...

Hier hebben we nog een project gebouwd met Struts1 en Struts2, verschrikkelijk gewoon die frameworks. Vooral voor frontend design.

profound

Legacy Member
Moto zei:
Als het snel en simpler kan zonder Spring, dumpen die handel :)

Het 'probleem' is echter dat veel bedrijven nog steeds werken met spring en het in de java-wereld dus nog altijd veel gevraagd is. Anders had ik dit kleine side-projectje wel in Play! gedaan :p

Albireo

Legacy Member
Alvast bedankt voor de uitgebreide uitleg :niceone:

bealzebub zei:
REST is een redelijk wijd en eigenlijk in webdevelopment termen al een oud concept en het is breder dan alleen maar webservices, maar daarvoor is het wel het meest gekend.

De opkomst van REST heeft veel te maken met de voordelen die het kan bieden: het schaalt makkelijk, het is een stuk compacter en performanter dan bv. SOAP en het past perfect in het plaatje van de meeste serverside MVC frameworks en HTTP en ook de frontend frameworks zoals Backbone of Ember kunnen makkelijk RESTful conventies automatiseren. Het is immers makkelijk om bv uit "GET /companies/123.json" af te leiden dat je het bedrijf met ID 123 wil uit de database halen en als JSON wil weergegeven zien.

REST heeft op zich niets met sessions te maken, ze worden zelfs dikwijls zonder sessions maar bv. via een API key in de header aangesproken. In tegenstelling tot SOAP is het ook geen protocol maar eerder een bepaalde architectuur, omdat het geen officiële standaard is. Het protocol om REST over te transporteren is HTTP(S). Daarom is het ook moeilijk om precies uit te leggen hoe een RESTful protocol er precies uitziet, je kan dat zelf beslissen, zolang het maar de principes van REST gebruikt.

<!--knip-->

Het begint me min of meer te dagen.
De traditionele manier van werken in webdelopment is dat je meerdere URL's gebruikt en die via POST of GET aanspreekt
bv.
GET http://mijnapp.be/view-people.aspx voor een lijst van personen
POST http://mijnapp.be/insert-people.aspx voor een nieuwe persoon
POST http://mijnapp.be/update-people.aspx?id=123 om een persoon te wijzigen
etc...

Zo hebben ze het mij aangeleerd en zo ziet elke tutorial op het web er ook uit. Maar ik kan de elegantie van de REST-methode zien. Ik kan ook een paar praktische moeilijkheden zien.
Ik heb PUT en DELETE nog NOOIT gebruikt. Ik zou eigenlijk niet eens weten hoe je die gebruikt in PHP of ASP.NET. Je hebt daar respectievelijk $_POST en $_GET versus Request.Form en Request.QueryString, maar niets om PUT of DELETE te verwerken (ik vermoed dat je dan low level methods moet bovenhalen, zoals HttpWebRequest).
De vraag is, is het sop de kool waard? En is het gebruik van PUT en DELETE een regel, of eerder een richtlijn?


De reden dat ik over sessies begon, is omdat die als ik het allemaal goed begrepen heb, het REST-principe schenden. REST is stateless en sessies introduceren net state.

bealzebub

Legacy Member
Albireo zei:
GET http://mijnapp.be/view-people.aspx voor een lijst van personen
POST http://mijnapp.be/insert-people.aspx voor een nieuwe persoon

In bovenstaande twee voorbeelden heb je redundant info, want het werkwoord (GET/POST) drukt eigenlijk al die view en insert uit. Eigenlijk is de resource "people" in combinatie met het werkwoord GET of POST designtechnisch gezien een stuk properder.

Albireo zei:

En hier komt dus het verschil met een REST service pas echt naar boven. Dit is dus de "old-school" manier van werken. Elke URL vertegenwoordigt een "action" en een "target". Is dit fout? Nee. Laat dat duidelijk zijn. Mijn ervaring met derde partijen die SOAP of HTTP based target-action of een variant gebruiken voor webservices al heel snel vervallen in request creep.

Bv.
http://mijnapp.be/update-companies-for-person?id=123
http://mijnapp.be/make-person-inactive?id=123
&#8230;

Ze gaan m.a.w. acties op een record als aparte url gaan exposen omdat dat binnen die action-based mindset perfect logisch klinkt.

In een REST setup zijn de twee URLs gewoon weeral een PUT op http://mijnapp.be/people/123 (of http://mijnapp.be/people?id=123, hoewel ik niet echt voor query parameters in die context ben), waarbij je in je POST params respectievelijk een array van companies doorgeeft of inactive=true.

T is maar een voorbeeld, maar ik zie echt wel dikwijls een wildgroei van calls waarbij verschillende mensen dan ook nog eens verschillende implementaties of meningen over hoe het juist moet gebeuren erop nahouden. Met REST kan dat ook gebeuren, maar de kans is een pak kleiner omdat je met een duidelijke conventie zit (die dikwijls dan nog door generische code zal geïmplementeerd worden en gewoon werken zonder dat er voor elke resource iets moet geschreven worden).

Trouwens, je moet voor REST zelfs absoluut niet die PUT/DELETE gebruiken. Je kan nog altijd die werkwoorden in de URL voorzien (je zal wel nog altijd GET en POST gebruiken, maar dat heeft dan meer met de potentie van die werkwoorden te maken). Om te zien hoe je nog altijd RESTful kan werken zonder die HTTP verbs verwijs ik naar de aanvulling onderaan deze post. Je zal misschien denken: dit is toch identiek aan wat ik doe, maar dat is niet zo. Het werkwoord is een aparte entiteit binnen de URL:
  • Jij: view-people.aspx, create-people.aspx, update-people.aspx
  • Zij: people/ , people/create, people/update

T is moeilijk om echt 100% duidelijk uit te leggen, ofwel klikt het ofwel klikt het niet :-)

Albireo zei:
Zo hebben ze het mij aangeleerd en zo ziet elke tutorial op het web er ook uit. Maar ik kan de elegantie van de REST-methode zien. Ik kan ook een paar praktische moeilijkheden zien.

Zoals?

Albireo zei:
Ik heb PUT en DELETE nog NOOIT gebruikt. Ik zou eigenlijk niet eens weten hoe je die gebruikt in PHP of ASP.NET. Je hebt daar respectievelijk $_POST en $_GET versus Request.Form en Request.QueryString, maar niets om PUT of DELETE te verwerken (ik vermoed dat je dan low level methods moet bovenhalen, zoals HttpWebRequest).

rest - PHP detecting request type (GET, POST, PUT or DELETE) - Stack Overflow

Er zal voor ASP ook wel genoeg te vinden zijn daarover. Alle webservers de dag van vandaag kennen PUT/PATCH en DELETE (en voor de oude kan het via een automatische parameter injectie gesimuleerd worden, Rails zal bv een POST doen met _method=PUT in de parameters).

Albireo zei:
De vraag is, is het sop de kool waard?

Dat is aan jou om te beslissen. Voor ons biedt REST in elk geval een meerwaarde omdat we er minder code voor moeten schrijven in de backend (generische code doet gans de REST routing en setup) en dat de frontend (Backbone of Ember based meestal) al voorzien zijn op de REST conventies.

In de populaire MVC omgevingen mapt het gewoon perfect op de model-view-controller conventie. Elk model is perfect als een resource te zien, de controllers kunnen perfect op een model mappen en de views kunnen perfect afgeleid worden uit extensie of Accept headers. Je kan natuurlijk ook wel nog altijd resources hebben die niet op een model mappen, zoals bv. cookie-based sessions.

Albireo zei:
De reden dat ik over sessies begon, is omdat die als ik het allemaal goed begrepen heb, het REST-principe schenden. REST is stateless en sessies introduceren net state.

Wel&#8230; ja en nee. Als je state wil hebben in REST moet je dat gewoon bij elke request via die unique resource identifiers kunnen doorgeven en dat kunnen perfect via cookies ofzo. Het is een misvatting dat je aan de serverzijde geen state management mag doen.

Laat ons bv. een shopping cart nemen. Het is dus niet zo dat je via REST geen items kan toevoegen/verwijderen aan die persoonlijke shopping cart.
In dat geval moet je shopping cart als een resource zien en heb je een URL zoals
http://mijnapp.be/shopping_cart
Ook daarop kan je weer die GET/POST/DELETE/PATCH/PUT methodiek toepassen voor create/update/delete. Maar een shopping cart is nog altijd persoonlijk, dus zal je via de request headers nog altijd een session maintainen en bij elke request die doorgeven. Dat kan zelfs een cookie value zijn, maar ook perfect iets anders. Zolang de combinatie van alles maar een unieke endpoint heeft en consistent voor alles werkt.

Als we dan toch over sessies bezig zijn, hoe implementeer je sessies dan in een RESTful omgeving? Een sessie is een resource, inloggen is een sessie aanmaken, uitloggen is je sessie afsluiten. Je kan in dit geval dus perfect een url http://mijnapp.be/sessions hebben waar je een POST naar doet om de sessie te maken (met login en paswoord als params) en een DELETE gebruiken naar die URL om uit te loggen. Net zoals al de rest is dat dus een Representational State Transfer. Het is gewoon consistent.

REST statelessness gaat dus niet over state management aan de serverzijde maar wel over het uniek en dus stateless identificeren van een entiteit/resource.

Aanvulling: bekijk de screencast op http://sailsjs.org eens om een praktijkvoorbeeld te zien over hoe REST conventies de hoeveelheid code kunnen reduceren.

Albireo

Legacy Member
'k Zal het dit weekend eens allemaal rustig gaan uitzoeken en zien wat REST voor mij kan doen. Bedankt. :)
(in ASP.NET heb je de Web API voor REST-toepassingen, heb ik net ontdekt)

profound

Legacy Member
Hoe zouden jullie volgend probleem aanpakken;

Ik heb een site waar je kleine post-it notes kan maken en toevoegen aan een soort van 'bord aan de muur'. Deze zijn ook allemaal draggable. Via een knop kan je notes aanmaken en toevoegen, die gebeurt via ajax. Mijn probleem is dat wanneer iemand via ajax een note toevoegt, er iemand anders misschien ook al notes heeft toegevoegd, en ik dus ook die nieuwe notes wil meegeven. Maar hoe weet ik of hoe kan ik weten welke notes er al op de site staan?
Ik had gedacht om alles in een arraylist bij te houden, en bij elke nieuwe note die toegevoegd wordt alle notes op te halen en te gaan kijken of ze al in de arraylist zitten, maar dit lijkt mij zo omslachtig....iemand met een betere oplossing?

edit: misschien effe vermelden dat alle notes in een DB worden opgeslagen ^^

W0utR

Legacy Member
Het makkelijkste lijkt mij om de datum van de laatste note bij te houden, wanneer je een nieuwe note post, haal je alle notes op die aangemaakt zijn na die datum. Maar of dat ook de beste manier is kan ik niet zeggen.

Scissor

Legacy Member
Iets ala SignalR? Waarin je gewoon in realtime zaken kan bewerken en dat iedereen in Realtime kan meevolgen?

passero

Legacy Member
Lijkt me toch niet zo heel moeilijk.
Aangezien java uw back-end is kan je toch een managed bean maken met application scope waarin je een status of datum of whatever bij houdt met het laatste bericht.
Uw app kan trouwens ook een ajax call doen en meegeven wat het laatste bericht is waardoor uw back end de nieuwe berichte mee geeft.

Gebruik je gewoon servlet technologie of eerder JSF? Indien dat laatste dan geven de meeste frameworks wel een manier om ajax gerelateerde dingen in JSF te doen.
Ik werk met primefaces en daar is zo iets vrij simpel te maken.

adrianhates

Legacy Member
ik vraag mij ook af waarom ge java zou gebruiken om webapplicaties te bouwen.. misschien is het mijn perceptie maar ik vind dat enorm "log" om mee te werken en da zuipt resources.

passero

Legacy Member
Wa heeft iedereeen toch tegen java...
Ik gebruik niet anders als java voor web apps :p

Ben misschien minder objectief als anderen gezien ik voor Oracle werk en zelf deels de technologie moet vormen :p

Maar toch... Wanneer het op MVC aankomt is JSF toch wel een van de betere hoor.
Je hebt een enorm grote en goeie community rond de meeste frameworks. Ok, het vraagt wat meer resources van de server en is niet zo light weight als PHP maar dat kan je van .net ook zeggen.

Ik vind een statement als "waarom java gebruiken voor web apps" hetzelfde als "waarom .net gebruiken".

ik denk dat veel mensen gewoon niet goed weten wat java kan bieden.

profound

Legacy Member
adrianhates zei:
ik vraag mij ook af waarom ge java zou gebruiken om webapplicaties te bouwen.. misschien is het mijn perceptie maar ik vind dat enorm "log" om mee te werken en da zuipt resources.

Ik ben een kleine webapp aan het maken om mijn java skills wat te onderhouden.
En gezien ik java toch kan, php niet (of toch veel minder goed) en ik een aantal ideetjes heb die graag wil uitwerken, is de keuze rap gemaakt. Hierna ga ik eens naar angular en node kijken ;)


Moto zei:
tja nobodies perfect :p

Nobody's* :p

Albireo

Legacy Member
CSS vraagstuk van de dag:

Ik heb een tabel met meerdere rijen en kolommen en in elke cel een div (met class ".DayOfMonth") uitgezonderd enkele eerste en laatste cellen in de tabel (het is een maandkalender) die leeg zijn. Ik probeer die div's een border te geven zonder dat ik met dubbele borders kom te zitten in 2 aaneengrenzende div's. Met m'n huidige aanpak heb ik overal de borders die ik wil uitgezonderd in de allereerste div. Hoe kan ik die allereerste div selecteren? (zonder de html aan te passen en die allereerste div begint niet altijd op woensdag natuurlijk)
Je kan de pagina zien op http://users.telenet.be/joris1976/calendar.html.

In't echt wordt dat server-side generated zou ik die eerste div gewoon een id kunnen geven, maar ik vraag me af of het puur via CSS te doen is.

W0utR

Legacy Member
Albireo zei:
CSS vraagstuk van de dag:

Ik heb een tabel met meerdere rijen en kolommen en in elke cel een div (met class ".DayOfMonth") uitgezonderd enkele eerste en laatste cellen in de tabel (het is een maandkalender) die leeg zijn. Ik probeer die div's een border te geven zonder dat ik met dubbele borders kom te zitten in 2 aaneengrenzende div's. Met m'n huidige aanpak heb ik overal de borders die ik wil uitgezonderd in de allereerste div. Hoe kan ik die allereerste div selecteren? (zonder de html aan te passen en die allereerste div begint niet altijd op woensdag natuurlijk)
Je kan de pagina zien op http://users.telenet.be/joris1976/calendar.html.

In't echt wordt dat server-side generated zou ik die eerste div gewoon een id kunnen geven, maar ik vraag me af of het puur via CSS te doen is.

Code:
.DayOfMonth:first-child {}
Al geprobeerd?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan