Building APIs in Scala with
Play! Framework 2
Silicon Valley Code Camp
Oct 5th, 2013
Manish Pandit
@lobster1234
Manish Pandit
@lobster1234
mpandit@netflix.com
linkedin.com/in/mpandit
slideshare.net/lobster1234
Agenda
Scala
Typesafe Platform
PlayFramework
REST
Hands-on API
Open Floor
Scala
Concise, yet expressive
Statically Typed via Type Inference
Rich Constructs
Functions as First Class Citizens
Power ...
Typesafe Platform
Scala Programming Language
PlayFramework for Web Applications
sbt for builds
Akka
Typesafe Activator
Mis...
Typesafe Activator
A very simple way to start with Scala and Play! Applications
Browser-based
Interactive
Comes with a goo...
Typesafe Activator
Typesafe Activator
Use if you do not have an IDE
Use it to play with various templates it comes with
Yet to mature but a (...
Play! Framework
Simple
Convention over Configuration
Focus on Developer Productivity
Asynchronous Processing Model
Makes t...
Play! Framework
Not a J2EE compatible framework
Does not follow the traditional request/response model
Creating a Play! Project
Using an IDE
Eclipse Import
Gotchas!
Start with a fresh installation of ScalaIDE
Go to Install New Software – Select ScalaIDE – Check Play2
Plugin
Run the App!
And Play! with it
http://localhost:9000
Test the app with play test
Play! Core Concepts
Uses sbt as the build system
(In a special way to support always-on builds)
Play! Core Concepts
MVC
Folder Structure
Controllers
Routes File
Tests
Play! Actions
In simple terms, an Action takes function, that takes a request
Request, and returns a Response.
Play! Actions
All routable methods of a Controller are Actions
(Request => Result) function
The almighty Action
A simple, no-request that returns a result.
A function that makes the Request available to the block
Y...
Play! Console Demo
run vs. ~run
With ~ run or run, change the app with syntax error
Fix the app and retry
Use the app with...
The Routes file
Type-safe way to define mappings from URLs to Actions
Rich support for basic data types
Handling of defaul...
RESTFul APIs
Not JSON over HTTP
Not JSON representation of your Database
No Spec or official standard
RESTFul APIs
Envision the entities as HTTP resources
Envision the interactions as HTTP methods
Read RFC 2616
Play! Hands-on API
Model – A Person
APIs – Get all, Get by First/Last/Zip, Add a person
JSON Request and Response
Model
object PersonModel {
val persons = ArrayBuffer(Person("Manish", "Pandit", 94568), Person("John", "Doe", 95051), Pers...
Controller
object SimpleAPI extends Controller {
implicit val personWrites = Json.writes[Person]
implicit val personReads ...
Routes
# ~~~~
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET /p...
Play! Packaging
Use play dist to package the app as a zip file
Run using the start script
Play! Advanced Topics
Reactive Programming
Akka, Futures, Promises
Play WS Library
Anorm and Slick
Further reading
http://www.playframework.com/
http://typesafe.com/platform
StackOverflow
Source : https://github.com/lobst...
We are hiring!
netflix.github.io
techblog.netflix.com
jobs.netflix.com
Fin
Manish Pandit
@lobster1234
mpandit@netflix.com
linkedin.com/in/mpandit
slideshare.net/lobster1234
Upcoming SlideShare
Loading in...5
×

Building Apis in Scala with Playframework2

861

Published on

My talk at Silicon Valley Code Camp 2013.

Two years ago I gave a talk on PlayFramework with Java at SVCC. As with everything, PlayFramework has evolved into a far mature ecosystem with native Scala support, and Typesafe backing. PlayFramework 2 is a simple, MVC-based, convention over configuration web application framework for Java and Scala. It is rapidly gaining popularity as more and more companies are adopting it for building scalable, performant, share-nothing architectures. In this talk I'll cover the fundamentals of Play! Framework2, a brief overview of Scala, and demonstrate building a simple, RESTful API. This will be a very interactive, and hands-on session. It'd be awesome if you have played around with Scala, but if you have not, the scope of this talk does not require you to be a Scala expert. It will however be very useful if you've worked with other Web Application Frameworks like Jersey, CXF, etc. so you can cross-relate the concepts.

Published in: Technology, Education
1 Comment
1 Like
Statistics
Notes
  • For those who did not attend this talk in person - the ArrayBuffer on Slide 27 is the 'simplest' example of where you would use a real database in the real world. Never, ever use mutable state in your models! The methods in the model would all talk to a storage layer or a storage system and not a mutable collection.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
861
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Building Apis in Scala with Playframework2

  1. 1. Building APIs in Scala with Play! Framework 2 Silicon Valley Code Camp Oct 5th, 2013 Manish Pandit @lobster1234
  2. 2. Manish Pandit @lobster1234 mpandit@netflix.com linkedin.com/in/mpandit slideshare.net/lobster1234
  3. 3. Agenda Scala Typesafe Platform PlayFramework REST Hands-on API Open Floor
  4. 4. Scala Concise, yet expressive Statically Typed via Type Inference Rich Constructs Functions as First Class Citizens Power of DSL Interoperability with the Java Ecosystem
  5. 5. Typesafe Platform Scala Programming Language PlayFramework for Web Applications sbt for builds Akka Typesafe Activator Misc. Tools
  6. 6. Typesafe Activator A very simple way to start with Scala and Play! Applications Browser-based Interactive Comes with a good number of templates
  7. 7. Typesafe Activator
  8. 8. Typesafe Activator Use if you do not have an IDE Use it to play with various templates it comes with Yet to mature but a (very) good start
  9. 9. Play! Framework Simple Convention over Configuration Focus on Developer Productivity Asynchronous Processing Model Makes testing easy JSON support for RESTFul Applications
  10. 10. Play! Framework Not a J2EE compatible framework Does not follow the traditional request/response model
  11. 11. Creating a Play! Project
  12. 12. Using an IDE
  13. 13. Eclipse Import
  14. 14. Gotchas! Start with a fresh installation of ScalaIDE Go to Install New Software – Select ScalaIDE – Check Play2 Plugin
  15. 15. Run the App!
  16. 16. And Play! with it http://localhost:9000 Test the app with play test
  17. 17. Play! Core Concepts Uses sbt as the build system (In a special way to support always-on builds)
  18. 18. Play! Core Concepts MVC Folder Structure Controllers Routes File Tests
  19. 19. Play! Actions In simple terms, an Action takes function, that takes a request Request, and returns a Response.
  20. 20. Play! Actions All routable methods of a Controller are Actions (Request => Result) function
  21. 21. The almighty Action A simple, no-request that returns a result. A function that makes the Request available to the block You can pass a BodyParser to the Action as an argument Default BodyParsers are available for common content types
  22. 22. Play! Console Demo run vs. ~run With ~ run or run, change the app with syntax error Fix the app and retry Use the app with ~ test in Play! Console Change the code and watch the tests fail Change the tests and watch them pass
  23. 23. The Routes file Type-safe way to define mappings from URLs to Actions Rich support for basic data types Handling of defaults
  24. 24. RESTFul APIs Not JSON over HTTP Not JSON representation of your Database No Spec or official standard
  25. 25. RESTFul APIs Envision the entities as HTTP resources Envision the interactions as HTTP methods Read RFC 2616
  26. 26. Play! Hands-on API Model – A Person APIs – Get all, Get by First/Last/Zip, Add a person JSON Request and Response
  27. 27. Model object PersonModel { val persons = ArrayBuffer(Person("Manish", "Pandit", 94568), Person("John", "Doe", 95051), Person("My", "Neighbor", 94568)) def add(p: Person) = persons += p def getAll = persons def getByFirstName(first: String) = persons.filter(_.first == first) def getByLastName(last: String) = persons.filter(_.last == last) def getByZip(zip: Int) = persons.filter(_.zip == zip) } case class Person(first: String, last: String, zip: Int)
  28. 28. Controller object SimpleAPI extends Controller { implicit val personWrites = Json.writes[Person] implicit val personReads = Json.reads[Person] def getAll = Action { Ok(Json.toJson(PersonModel.getAll)) } def add = Action(parse.json) { request => Logger.info(s"Body is $request.body") request.body.validate(personReads) match { case x: JsError => BadRequest case x: JsSuccess[Person] => PersonModel.add(x.get) Created } } def getByFirstName(first: String) = Action { val list = PersonModel.getByFirstName(first) if (list.isEmpty) NotFound else Ok(Json.toJson(PersonModel.getByFirstName(first))) } }
  29. 29. Routes # ~~~~ # Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page GET /persons controllers.SimpleAPI.getAll GET /persons/first/:first controllers.SimpleAPI.getByFirstName(first) GET /persons/last/:last controllers.SimpleAPI.getByLastName(last) GET /persons/zip/:zip controllers.SimpleAPI.getbyZip(zip:Int) GET /persons/default controllers.SimpleAPI.getByFirstName(first="Manish") POST /persons controllers.SimpleAPI.add
  30. 30. Play! Packaging Use play dist to package the app as a zip file Run using the start script
  31. 31. Play! Advanced Topics Reactive Programming Akka, Futures, Promises Play WS Library Anorm and Slick
  32. 32. Further reading http://www.playframework.com/ http://typesafe.com/platform StackOverflow Source : https://github.com/lobster1234/SVCC2013
  33. 33. We are hiring! netflix.github.io techblog.netflix.com jobs.netflix.com
  34. 34. Fin Manish Pandit @lobster1234 mpandit@netflix.com linkedin.com/in/mpandit slideshare.net/lobster1234
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×