Hi all,


We've made three small, but important changes to the spec that will
affect  implementations in development:


*1. Blob id must be unique for binary+content-type*



When implementing the upload/download spec we realised the blob id
needs to be unique over the binary content AND the content type, not
just the binary content on its own, as the download handler needs to
know what content type to serve up. Therefore, if you upload the same
binary data with two different content types, the server needs to
return different blob ids.


*2. Clients must empty a mailbox before deleting it*



The previous spec said the server had to move any messages with no other
mailbox into the inbox if you deleted a mailbox. This was weird.
Deleting the messages themselves would also not be in line with standard
JMAP philosophy of explicit changes only, and in  environments that
allow messages to be in multiple mailboxes would result in weirdly
different behaviour depending on whether each message was in another
mailbox or not. Either behaviour could result in a lot of server work
being initiated by the client with a small command, and this conflicts
with the goal of ensuring the client cannot denial-of-service attack the
server, either on purpose or accidentally!


Forbidding non-empty mailboxes from being destroyed seems the most
sensible solution. (A client can of course still allow a non-empty
mailbox to be destroyed in the UI, it just has to remove the messages
explicitly in some way before destroying the mailbox via JMAP.)


*3. Change type signature of foosSet#updated response*



For some data types, the server may have to make changes to certain
properties on a record when a client updates other properties. For
example, a datatype might have a server-assigned timestamp property that
gets updated every time the client makes any other change to the object.
So rather than just return an array of ids for successfully updated
records, we now return a map of those ids to either `null` (the server
made no changes), or an object with the extra changes made by the
server. We chose `null` instead of an empty object, as it avoids memory
allocations and is easier to differentiate from an object with
properties, and should gzip to a similar size over the wire.


Since this is a change to the standard model, it affects all set
methods.


Full change log and diffs can of course be found in the repo[1].



Neil.


Links:

  1. https://github.com/jmapio/jmap

-- 
You received this message because you are subscribed to the Google Groups 
"JMAP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jmap-discuss+unsubscr...@googlegroups.com.
To post to this group, send email to jmap-discuss@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jmap-discuss/1481518558.1751692.815840417.5289EC11%40webmail.messagingengine.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to