class RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, ResponseType] extends AnyRef
A builder that helps build Rest Actions.
- Alphabetic
- By Inheritance
- RestActionBuilder
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new RestActionBuilder(auth: HeaderAccessControl[AuthType], bodyParser: BodyParser[BodyType], errorHandler: PartialFunction[Throwable, RestError])(implicit keyFormat: KeyFormat[ResourceKeyType], resourceFormat: OFormat[ResourceType], ec: ExecutionContext, mat: Materializer)
Type Members
-
type
ActionBuilder[A] = RestActionBodyBuilder[ActionRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, A]
Arbitrary actions on objects that are not standard CRUD operations.
Arbitrary actions on objects that are not standard CRUD operations. This is very flexible, and must be carefully used only for good (and not evil). Actions may have side effects and may not be idempotent.
Example:
def convertToHtml(ids: Seq[Int]) = Rest.action { ctx => val pages = store.multiGet(ids) val htmlIfied = pages.map { page => MarkdownEngine.toHtml(page) } store.multiSave(htmlIfied) Ok(htmlIfied) }
Underlying HTTP request (ids=1,2,3,5,8,13):
POST /api/myResource?action=convertToHtml&ids=1,2,3,5,8,13
- type BodyBuilder[Category, Response] = RestActionBodyBuilder[Category, AuthType, BodyType, ResourceKeyType, ResourceType, Response]
-
type
CreateBuilder = RestActionBodyBuilder[CreateRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, Option[ResourceType]]]
Creates a new resource given an input.
Creates a new resource given an input.
Example:
def create = Rest.create { ctx => val newElement = createResourceFromBody(ctx.body) val newId = store.save(newOne) Ok(Keyed(newId, Some(newElement))) }
Underlying HTTP request (body elided):
POST /api/myResource
-
type
DeleteBuilder = RestActionBodyBuilder[DeleteRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Unit]
Deletes an element from a collection.
Deletes an element from a collection.
Example:
def delete(id: Int) = Rest.delete { ctx => store.delete(id) Ok() }
Underlying HTTP request (id=4):
DELETE /api/myResource/4 - type FinderBuilder = RestActionBodyBuilder[FinderRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, FinderResponseType]
-
type
FinderResponseType = Seq[Keyed[ResourceKeyType, ResourceType]]
Retrieval by any method other than retrival by Id [primary key].
Retrieval by any method other than retrival by Id [primary key]. (For example, alternate key lookup, or full text search. This is intentionally a flexible API and can be used appropriately in many contexts. A finder MUST NOT have side effects, and must be idempotent.
Example:
def alternateKey(name: String) = Rest.finder { ctx => val results = store.lookupByName(name=name) Ok(results.toSeq) }
Underlying HTTP request (finder name='alternateKey', name='hogwarts'):
GET /api/myResource?q=alternateKey&name=hogwarts
-
type
GetAllBuilder = RestActionBodyBuilder[GetAllRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Seq[Keyed[ResourceKeyType, ResourceType]]]
Gets all elements in a collection.
Gets all elements in a collection. Note: please use paging to avoid OOM-ing.
Example:
def getAll = Rest.getAll { ctx => val results = store.getAll(start=ctx.paging.start, limit=ctx.paging.limit) Ok(results) }
Underlying HTTP request (pagination: start=10, limit=5)
GET /api/myResource?start=10&limit=5
-
type
GetBuilder = RestActionBodyBuilder[GetRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, ResourceType]]
Gets a resource by ID
Gets a resource by ID
Example:
def get(id: Int) = Rest.get { ctx => Ok(Keyed(id, MyResource(name=s"Resource-$id"))) }
Underlying HTTP request (id = "1"):
GET /api/myResource/1 -
type
MultiGetBuilder = RestActionBodyBuilder[MultiGetRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Seq[Keyed[ResourceKeyType, ResourceType]]]
Gets a batch of resources from this collection.
Gets a batch of resources from this collection.
Example:
def multiGet(ids: Seq[Int]) = Rest.multiGet { ctx => Ok(ids.map(id => Keyed(id, MyResource(name=s"Resource-$id")))) }
Underlying HTTP request (ids = "1,2,3,4")
GET /api/myResource?ids=1,2,3,4
-
type
PatchBuilder = RestActionBodyBuilder[PatchRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, ResourceType]]
Patch (or partial update) a resource.
Patch (or partial update) a resource.
Example:
def patch(id: Int) = Rest.patch { ctx => val oldObj = store.get(id) val newObj = PatchEngine.patch(oldObj, ctx.body) store.save(id, newObj) Ok(Keyed(id, newObj)) }
Underlying HTTP request (id=10, body elided):
PATCH /api/myResource/10 -
type
UpdateBuilder = RestActionBodyBuilder[UpdateRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Option[Keyed[ResourceKeyType, ResourceType]]]
Updates a resource with a new copy of the resource.
Updates a resource with a new copy of the resource.
Example:
def update(id: Int) = Rest.update { ctx => val newVersion = validateBody(ctx.body) store.save(id, newVersion) Ok(Keyed(id, newVersion)) }
Underlying HTTP request (body elided, id=2):
PUT /api/myResource/2
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def action[A]: ActionBuilder[A]
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
auth[NewAuthType](auth: HeaderAccessControl[NewAuthType]): RestActionBuilder[RACType, NewAuthType, BodyType, ResourceKeyType, ResourceType, ResponseType]
Set the authentication framework.
-
def
body[NewBodyType](bodyParser: BodyParser[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]
Set the body type.
-
def
catching(errorHandler: PartialFunction[Throwable, RestError]): RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, ResponseType]
Adds an error handling function to allow exceptions to generate custom errors.
Adds an error handling function to allow exceptions to generate custom errors.
Note: all of the partial functions are stacked, with later functions getting an earlier crack at an exception to handle it.
- errorHandler
Error handling partial function.
- returns
the immutable RestActionBuilder to be used to build the naptime resource action.
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
- def create: CreateBuilder
- def delete: DeleteBuilder
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- def finder: FinderBuilder
- def get: GetBuilder
- def getAll: GetAllBuilder
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def jsonBody[NewBodyType](maxLength: Int = 100 * 1024)(implicit reads: Reads[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]
- def jsonBody[NewBodyType](implicit reads: Reads[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]
- def multiGet: MultiGetBuilder
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def patch: PatchBuilder
- def rawJsonBody(maxLength: Int = 100 * 1024): RestActionBuilder[RACType, AuthType, JsValue, ResourceKeyType, ResourceType, ResponseType]
-
def
returning[NewResponseType](): RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, NewResponseType]
Set the response type.
Set the response type. TODO: is this necessary?
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
- def update: UpdateBuilder
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )