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.