| Time |
S |
Nick |
Message |
| 01:43 |
|
|
leclerc joined #rest |
| 03:49 |
|
|
KevBurnsJr joined #rest |
| 06:35 |
|
|
wittysense joined #rest |
| 06:50 |
|
|
Haudegen joined #rest |
| 06:53 |
|
|
_ollie joined #rest |
| 07:57 |
|
|
interop_madness joined #rest |
| 08:36 |
|
|
wittysense joined #rest |
| 10:07 |
|
|
KevBurnsJr joined #rest |
| 10:13 |
|
|
drcode joined #rest |
| 10:28 |
|
|
drcode joined #rest |
| 10:38 |
|
|
wittysense joined #rest |
| 11:06 |
|
|
shodan` joined #rest |
| 12:09 |
|
|
Haudegen joined #rest |
| 12:39 |
|
|
wittysense joined #rest |
| 13:04 |
|
|
wittysense joined #rest |
| 15:54 |
|
|
jenia joined #rest |
| 15:54 |
|
jenia |
hello everyone |
| 15:54 |
|
jenia |
is any Ajax app a REST app? |
| 15:55 |
|
mdk |
jenia: no |
| 15:55 |
|
jenia |
mdk, I'm reading this article and don't understand it completlyhttps://stackoverflow.com/questions/19884295/soap-vs-rest-differences |
| 15:55 |
|
jenia |
https://stackoverflow.com/questions/19884295/soap-vs-rest-differences |
| 15:56 |
|
jenia |
mdk, what are examples of REST apps? |
| 15:57 |
|
mdk |
jenia: api.github.com is a service that I think respects some of the REST "philosophy" |
| 15:57 |
|
jenia |
thanks |
| 15:58 |
|
mdk |
jenia: REST is about discoverability, respecting HTTP semantics (RFC 7231), representing states (instead of procedures), … |
| 15:59 |
|
jenia |
mdk, can I ask you more on that point? cause in the wiki it says: |
| 15:59 |
|
jenia |
"using a uniform and predefined set of stateless operations" |
| 15:59 |
|
jenia |
https://en.wikipedia.org/wiki/Representational_state_transfer |
| 16:00 |
|
mdk |
jenia: Ajax is "just" "Let's use asynchronous Javascript calls to transfer XML", there's no "let's do it cleanly" in it, just a lot of "we can do it" (which is obviously better that the previous "we just can't" |
| 16:00 |
|
mdk |
) |
| 16:00 |
|
jenia |
lol |
| 16:00 |
|
mdk |
and SOAP is all about RPC (Remote Procedure Call), not about state transfer |
| 16:00 |
|
jenia |
alright |
| 16:01 |
|
jenia |
so the operations have no state |
| 16:01 |
|
jenia |
but I see in api.github: https://github.com/settings/connections/applications{/client_id} |
| 16:01 |
|
jenia |
but client_id is a state no? |
| 16:01 |
|
mdk |
So in SOAP you're expressing "Call the new_method(login, password) procedure", in REST you're expressing "Add this user to the collection of existing users" |
| 16:02 |
|
mdk |
jenia: As long as there's a database server-side, yes, there's a state |
| 16:02 |
|
mdk |
You will POST/PUT/PATCH data, obviously (a new message, whatever), this will change a state |
| 16:03 |
|
jenia |
mdk, so this phrase in the wiki is false I guess: using a uniform and predefined set of stateless operations |
| 16:03 |
|
mdk |
The stateless part is about operations, (interactions) between the server and the client being stateless |
| 16:04 |
|
mdk |
Let me find an example… |
| 16:04 |
|
jenia |
alright. thank you |
| 16:04 |
|
mdk |
A statefull operation would be "call login(username password) to get a session id, then use this session_id to call add_message(text) |
| 16:04 |
|
mdk |
" |
| 16:05 |
|
jenia |
okay. got it |
| 16:05 |
|
jenia |
there's a state between the two ops |
| 16:05 |
|
jenia |
and in REST how would that look? |
| 16:05 |
|
|
interop_madness joined #rest |
| 16:05 |
|
|
interop_madness joined #rest |
| 16:06 |
|
mdk |
In REST I would just use HTTPS and basic auth, or maybe a JWT, so you just skip the "login" part, either the backend receive the new message with the login:password of the user (basic auth), or a signed token prooving the user is who he say he is (JWT) |
| 16:07 |
|
mdk |
There may be other REST"y" ways to do it, I'm not Roy Fielding, and I'm not perfect |
| 16:07 |
|
jenia |
mdk, alright. thanks. no one is perfect :) |
| 16:08 |
|
mdk |
The idea is each operation by itself is meaningfull, it's not part of a sequence. But on the other hand, there's obviously an application state : you can't pay a bill if you have still not bought the thing |
| 16:08 |
|
jenia |
yes |
| 16:09 |
|
jenia |
that's what I can't wrap my head around |
| 16:09 |
|
mdk |
So the state exist, the sequence exist, but only imposed by the semantics of the thing you're implementing |
| 16:09 |
|
mdk |
You can't POST an issue on not-yet existing project, and so on |
| 16:10 |
|
mdk |
So don't mind about the statelessness part, maybe focus on the HTTP semantics, RFC 7231 is very interesting on the subject |
| 16:11 |
|
mdk |
Typically the safe and idempotent methods : https://tools.ietf.org/html/rfc7231#section-4.2 |
| 16:11 |
|
mdk |
Basically GET is idempotent, you can read a thing twice, it's not expected to break nothing |
| 16:11 |
|
mdk |
PUT is "Put this here", you can put the same thing twice in the same place, it won't break nothing |
| 16:12 |
|
mdk |
POST is not idempotent, post may mean "Add to the collection", adding a coffee twice on an order list is NOT equivalent to add it once |
| 16:13 |
|
mdk |
Alongside with those notions, the If-Match and If-None-Match are really interesting : |
| 16:13 |
|
jenia |
okay. what are those? |
| 16:13 |
|
mdk |
Imagine this sequence |
| 16:14 |
|
mdk |
I GET /message/1 |
| 16:14 |
|
mdk |
it have a ETag header telling me it's version 123 of the message |
| 16:14 |
|
mdk |
I modify it (fix a typo \o/) |
| 16:14 |
|
mdk |
now I PUT the modified message on /message/1 with a If-Match etag 123 |
| 16:15 |
|
mdk |
If you modified the message before me, I would overwrite your modification, it would be lost |
| 16:15 |
|
mdk |
but with the if-match the server should reply with a conflict |
| 16:15 |
|
mdk |
so now, your client knows there's a problem, and it should GET again and resolve the conflict (some code to do here, HTTP don't care about your implementation) |
| 16:16 |
|
mdk |
HTTP is cool for this kind of mechanisms, and REST is all about "use HTTP clealy, it already provides a lot to do things meaninfully" |
| 16:17 |
|
jenia |
hummmm |
| 16:17 |
|
jenia |
alright thanks |
| 16:17 |
|
mdk |
sry I have to go, going to a salt meetup, hope it will be cool ^^ |
| 16:17 |
|
mdk |
take care |
| 16:18 |
|
jenia |
you too |
| 16:18 |
|
jenia |
thank you!! |
| 16:30 |
|
|
drcode joined #rest |
| 16:47 |
|
|
drcode joined #rest |
| 16:48 |
|
|
Haudegen joined #rest |
| 16:59 |
|
|
drcode joined #rest |
| 17:27 |
|
leclerc |
mdk: in many cases you're not just using HTTP and the client is not just seeing HTTP, but you're basically mapping API specifics ad-hoc to existing HTTP mechanisms, adding additional intent to them that the client should be aware of. |
| 17:27 |
|
leclerc |
mdk: in the end it's no better than a custom interface. |
| 18:18 |
|
|
wittysense joined #rest |
| 19:48 |
|
|
jenia joined #rest |
| 20:14 |
|
|
_ollie joined #rest |