Apache Sling as an OSGi-powered REST middleware - Robert Munteau

26
http://robert.muntea.nu @rombert Apache Sling as a RESTful API gateway for your NoSQL datastores Apache Sling as a RESTful API gateway for your NoSQL datastores Robert Munteanu, Adobe Systems EclipseCon Europe 2015

Transcript of Apache Sling as an OSGi-powered REST middleware - Robert Munteau

Page 1: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Apache Sling as a RESTful API gateway for your NoSQL datastores

Apache Sling as a RESTful API gatewayfor your NoSQL datastores

Robert Munteanu, Adobe SystemsEclipseCon Europe 2015

Page 2: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Who I am

$DAYJOB Adobe Experience

Manager Apache Sling Apache Jackrabbit Apache Felix

FOSS Apache Sling MantisBT Mylyn Connector for

MantisBT Mylyn Connector for Review

Board

Page 3: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Agenda

● Quick facts and figures● Meet Barry● Demo● Why is Sling such a good fit for an API gateway● Conclusions, Resources, Q&A

Page 4: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Apache Sling - History

2007Incubation

2009TLP

2015Version 8

200xPre-Apache

Page 5: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

High-level View of the Code

Source: OpenHub

Page 6: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Level of activity

Source: OpenHub

Source: status.apache.org

Page 7: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Conceptual foundations

REST-basedContent-driven

OSGi-powered

Scripting InsideApache

Page 8: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

REST-based

/content/blog/

/content/blog/{0}.html

/

BlogViewController

BlogListController

HomeController

SlingMainServlet//content/content/blog/content/blog/hello-world

Page 9: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

REST-based

//content/content/blog/content/blog/hello-world

[sling/redirect][sling/redirect]

[blog/welcome][blog/page]

Page 10: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Barry – Senior Buzzword Deliverer

Page 11: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Demo time!

Page 12: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

How is everything mapped?

/ ( root )

/content/blog/comments

/content/blog/posts/content/blog/images

Page 13: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

How does Sling manage this?

ResourceProvider

JCR NoSQL FS

Couchbase MongoDB

ResourceProviderFactoryProduces

Page 14: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

SPI → API

ResourceProviderFactory

OSGi Service Registry

ResourceResolver

Registers Gets

Page 15: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

ResourceResolver

Resource getResource(String path);

Iterable<Resource> getChildren(Resource parent);

Iterator<Resource> findResources(String query, String language);

Resource create(Resource parent, String name, Map<String, Object> properties) throws PersistenceException;

void delete(Resource resource) throws PersistenceException;

void commit() throws PersistenceException;

Page 16: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

How do I get to handle a Resource?

1 GET /content/blog/posts/hello_world.json

2 ResourceResolver.resolve(...)

3 ServletResolver.resolveServlet(...)3

4 servlet.doGet(...)

Page 17: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

What do clients see out of this?

Resource res = request.getResource();

// 1. reading ...

ValueMap properties = ↵ res.getValueMap();

String title = properties.get(“jcr:title”,↵ “Missing”);

Post post = res.adaptTo(Post.class);

title = post.getTitle();

Page 18: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Why do we need adaptTo?

Adaptable

Resource ValueMap

Map<String,Object> Post

Page 19: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

What do clients see out of this?

Resource res = request.getResource();

// 2. writing ...

ValueMap properties = ↵ res.adaptTo(ValueMap.class);

String title = properties.put(“jcr:title”,↵ “Hello, world”);

Post post = res.adaptTo(Post.class);

post.setTitle(“Hello, world”);

res.getResourceResolver().commit();

Page 20: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Demo time!

Page 21: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Oh, but there's more

Page 22: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

More features

● Eventing, Thread Pooling, Job Management, Caching● Scripting: Groovy, Scala, JSP, Sightly, Java, Ruby, Thymeleaf● Flexible resource rendering with resource types● Very extensible due to being internally powered by OSGi – most extension points available to clients

Page 23: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Beyond the NoSQL datastores

Page 24: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Buzzword checklist

✔ RESTful✔ API gateway ✔ NoSQL✔ OSGi

Page 25: Apache Sling as an OSGi-powered REST middleware - Robert Munteau

http://robert.muntea.nu @rombert

Resources

● Apache Sling – http://sling.apache.org● Sling NoSQL providers - http://sling.apache.org/documentation/bundles/nosql-resource-providers.html● Apache Jackrabbit Oak - http://jackrabbit.apache.org/oak/