Time |
S |
Nick |
Message |
00:37 |
|
|
timg___ joined #rest |
00:58 |
|
|
fuzzyhorns joined #rest |
02:59 |
|
|
fuzzyhor_ joined #rest |
11:47 |
|
|
_ollie joined #rest |
13:05 |
|
|
graste joined #rest |
14:33 |
|
|
tbsf joined #rest |
15:08 |
|
|
tbsf joined #rest |
15:37 |
|
|
rm- joined #rest |
15:39 |
|
|
tbsf joined #rest |
15:39 |
|
rm- |
Is it breaking the REST way of life to to post an empty body to /<entrypoint>/<id>/<doSomething> instead of posting with a body to /<entrypoint> with the data of { id: <id>, doSomething: true} ? |
15:42 |
|
rm- |
I guess the obvious answer would be 'yes'. But I'm considering doing it that way because the "easy way out". It's faster to code, easier to understand for others. |
15:48 |
|
pdurbin |
meh, it's probably ok |
15:55 |
|
rm- |
Problem with this approach I guess is - where does one draw the line and therefor it should go by the book? ;-) |
15:58 |
|
fumanchu |
REST is an architectural style (not a way of life ;) -- if your Pueblo-style rancho needs a doghouse, it doesn't have to have a flat roof |
15:59 |
|
rm- |
Or at least to reduce complaints from the asperger coders (which I'm part of myself so it's OK to joke about it). |
15:59 |
|
fumanchu |
draw the lines based on desired non-functional properties |
16:00 |
|
rm- |
fumanchu: Unfortunately my mustasche haven't grown as far down on each side of my mouth, so my non-native english toungue is a bit occupied with making the hair grow rahter than spending too much time finding the words. Sorry for my lack of vocuabular ;) |
16:01 |
|
rm- |
This specific case is activating an inactive module. So the rest-case would be either /modules/1/activate or /modules PUT: {id: 1, activate: true}. |
16:02 |
|
fumanchu |
no, those are the RPC cases |
16:02 |
|
rm- |
BLAST! I just can't get through to you, can I! /O\ |
16:04 |
|
fumanchu |
PUT /modules/1/ {"status": "activated"} would be a RESTful way to do it. Transfer a representation of the intended state. |
16:05 |
|
fumanchu |
(actualy, I'd recommend PATCH if you're only transferring part of the intended state) |
16:05 |
|
rm- |
status: "activated" seems more like the response to me. And of course... That's how it should be done. |
16:06 |
|
fumanchu |
that's the great thing about REST: requests and responses both transfer the same state and look awfully similar |
16:06 |
|
fumanchu |
but again, if that's not what you need, then don't worry about it: use RPC |
16:06 |
|
rm- |
I want to do it the RESTful way, that's why I felt I had to ask someone. |
16:08 |
|
rm- |
fumanchu: Could/Should "status" contain an object? |
16:08 |
|
rm- |
Or just a string? I mean. Status could also be updated, right... |
16:09 |
|
rm- |
And then - should response then contain the data that has been updated? |
16:09 |
|
|
tbsf joined #rest |
16:09 |
|
rm- |
*whew* |
16:09 |
|
|
fumanchu_ joined #rest |
16:09 |
|
rm- |
Noes! you missed my flood of questions >_< |
16:10 |
|
rm- |
Fear not. I can handle copy and paste \o/ |
16:12 |
|
rm- |
fumanchu_: I want to do it the RESTful way, that's why I felt I had to ask someone. Could/Should "status" contain an object or just a string? I mean. Status could also be "updated", right... |
16:14 |
|
fumanchu_ |
I don't know your domain, but I'm guessing if you had a verb "activate" that that moves a module from the "inactive" state to an "active" state. That is the state of the resource. You generally don't want to include control state like "updated"/"ok, I did what you asked" in the resource itself--that's what the HTTP response status code is for |
16:16 |
|
rm- |
Hmmm... Yeah. Good point. |
16:17 |
|
rm- |
But why should a certain update return a status update while other type of updates returns the new state? |
16:19 |
|
fumanchu_ |
all HTTP requests return a control status: 200 OK, 404 Not Found, 409 Conflict, etc |
16:19 |
|
rm- |
Yep, that's my point. |
16:22 |
|
fumanchu_ |
updates (POST, PUT, PATCH, DELETE) should not return the new state of the resource. clients generally won't expect it, because not every update command has a corresponding GET that returns what you POSTed. caches can't cache it. |
16:25 |
|
rm- |
Fair enough. However - that was not my point. My point was - why should type of update return a status update while others in the same domain responds with a http status code/what-have-you? |
16:26 |
|
fumanchu_ |
I guess I still don't follow. "others" is actually "all". I don't know what type of update "returns a status update" or doesn't "respond with a http status" |
16:27 |
|
fumanchu_ |
perhaps a concrete example would help |
16:28 |
|
fumanchu_ |
or is /modules/1/activate the example? |
16:30 |
|
|
tbsf joined #rest |
16:30 |
|
rm- |
Ok. Like this. I have Module ({ name: 'whatever', description: 'Lorem ipsum', active: false, author: 'Another Lipsum'}). When I do PUT:/modules/1 {description: 'Bacon Ipsum'} I repond with a 200 and that's that. But afaik you suggest that when doing PATCH /modules/1 {activate: true} I should respond with 200 {status: 'activated'}. What I don't seem to grasp is why one resource update should return one response |
16:31 |
|
rm- |
and another / all others only returns 200 without any data... |
16:31 |
|
fumanchu_ |
ah I see |
16:31 |
|
fumanchu_ |
I wasn't clear |
16:33 |
|
fumanchu_ |
my point was that when doing PATCH /modules/1 you should *send* {active: True} (an adjective, not "activate", a verb). The response should be 200 OK (or even 204 No Content) with no payload. |
16:33 |
|
fumanchu_ |
it might seem trivial to demand an adjective instead of a verb, but that in fact cuts to the heart of REST vs RPC |
16:34 |
|
rm- |
Ah, Payload is the word I'm eating my hair looking for. >_< thanks |
16:34 |
|
|
tbsf joined #rest |
16:34 |
|
fumanchu_ |
REST update says "here is the new resource or attributes". RPC says "modify the resource as I dictate". |
16:35 |
|
fumanchu_ |
(RPC update, that is) |
16:36 |
|
rm- |
Yeah, that I understood. What I didn't understand was the response... But now it seems like I totally misunderstood what you meant. I think we're on the same page again. |
16:36 |
|
fumanchu_ |
yay |
16:40 |
|
rm- |
Thanks a lot for your wise words. |
16:40 |
|
fumanchu_ |
not for the first time I wish there were a standard way of writing partial HTTP requests and responses on one line to avoid this kind of confusion :) |
16:41 |
|
fumanchu_ |
np, good luck! |
16:41 |
|
rm- |
Haha |
16:42 |
|
rm- |
Ready for another one? ;) |
16:42 |
|
fumanchu_ |
....maybe :) |
16:42 |
|
rm- |
Patch only takes part of the resource that should be updated while PUT should receive the whole resource - right? |
16:43 |
|
fumanchu_ |
mostly, yes |
16:43 |
|
fumanchu_ |
lots of "excepts" there |
16:43 |
|
rm- |
It seems like most people are using PUT most of the time and barely every uses PATCH (no sources to cling onto about that statement tho) ;) |
16:44 |
|
fumanchu_ |
yes, it's common |
16:44 |
|
fumanchu_ |
for a host of reasons |
16:44 |
|
rm- |
Less code less bugs seems like the best argument to me... |
16:46 |
|
rm- |
But then one should use PATCH by default? Cause updating the whole resource would be equal to PUT (with the difference being that it's different HTTP request types) |
16:47 |
|
fumanchu_ |
the original use-case for PATCH was not to send part of the resource, but instead to send instructions in some other media type, like sending a .diff file to a .txt resource |
16:47 |
|
fumanchu_ |
JSON has mostly blurred that line |
16:48 |
|
rm- |
Yeah... That would explain the verb name... |
16:48 |
|
fumanchu_ |
(and in rigorous media types like my Shoji, PATCH takes the same media-type) |
16:49 |
|
fumanchu_ |
but the remaining big difference between PATCH and PUT is that PUT is allowed to create the resource if it does not already exist, and PATCH isn't |
16:49 |
|
rm- |
Aha! |
16:51 |
|
rm- |
hidden usecase *DING* taking notes... Cheers |
16:52 |
|
rm- |
Or rather shaded... Anywho... Thanks again! |
16:52 |
|
fumanchu_ |
np |
16:52 |
|
rm- |
This is FUN \o/ |
16:52 |
|
fumanchu_ |
:D |
17:26 |
|
|
tbsf joined #rest |
18:41 |
|
|
tbsf joined #rest |
19:48 |
|
|
DracoBlue joined #rest |
21:18 |
|
|
DracoBlue joined #rest |
22:28 |
|
|
tbsf joined #rest |
23:17 |
|
|
wCPO joined #rest |
23:17 |
|
wCPO |
On error, is it "okay" only to return a status code? or should I also return some sort of error message inside json? |
23:22 |
|
fumanchu_ |
okay, not great, although it depends on the error |
23:22 |
|
fumanchu_ |
returning some kind of payload that tells the user or client developer what went wrong and how to go about fixing it is always nice |
23:28 |
|
|
tbsf joined #rest |