[infinispan-dev] REST Refactoring - breaking changes

Sebastian Laskawiec slaskawi at redhat.com
Tue May 16 05:05:52 EDT 2017


Hey guys!

I'm working on REST Server refactoring and I changed some of the previous
behavior. Having in mind that we are implementing this in a minor release,
I tried to make those changes really cosmetic:

   - RestEASY as well as Servlet API have been removed from modules and
   BOM. If your app relied on it, you'll need to specify them separately in
   your pom.
   - Previous implementation picked application/text as a default content
   type. I replaced it with text/plain with charset which is more precise and
   seems to be more widely adopted.
   - Putting an entry without any TTL nor Idle Time made it living forever
   (which was BTW aligned with the docs). I switched to server configured
   defaults in this case. If you want to have an entry that lives forever,
   just specify 0 or -1 there.
   - Requesting an entry with wrong mime type (imagine it was stored using
   application/octet-stream and now you're requesting text/plain) cased Bad
   Request. Now I switched it to Not Acceptable which was designed specially
   to cover this type of use case.
   - In compatibility mode the server often tried to "guess" the mimetype
   (the decision was often between text/plain and application/octet-stream). I
   honestly think it was a wrong move and made the server side code very hard
   to read and predict what would be the result. Now the server always returns
   text/plain by default. If you want to get a byte stream back, just add
   `Accept: application/octet-stream`.
   - The server can be started with port 0. This way you are 100% sure that
   it will start using a unique port without colliding with any other service.
   - The REST server hosts HTML page if queried using GET on default
   context. I think it was a bug that it didn't work correctly before.
   - UTF-8 charset is now the default. You may always ask the server to
   return different encoding using Accept header. The charset is not returned
   with binary mime types.
   - If a HEAD request results in an error, a message will be returned to
   the client. Even though this behavior breaks Commons HTTP Client (HEAD
   requests are handled slightly differently and causes the client to hang if
   a payload is returned), I think it's beneficial to tell the user what went
   wrong. It's worth to mention that Jetty/Netty HTTP clients work correctly.
   - RestServer doesn't implement Lifecycle now. The protocol server
   doesn't support start() method without any arguments. You always need to
   specify configuration + Embedded Cache Manager.

Even though it's a long list, I think all those changes were worth it.
Please let me know if you don't agree.

Thanks,
Sebastian

-- 

SEBASTIAN ŁASKAWIEC

INFINISPAN DEVELOPER

Red Hat EMEA <https://www.redhat.com/>
<https://red.ht/sig>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20170516/4740bc17/attachment.html 


More information about the infinispan-dev mailing list