用于REST API的域类中的Scala选项

时间:2015-10-17 17:36:39

标签: scala

我不确定在使用Scala时我应该如何设计我的域类。假设我想提供一个用于管理书籍的REST API。当用户创建新书时,未指定书籍的ID和电子标签,因此我认为我将对这些字段使用选项类型:

class Book(val id: Option[UUID], val name: String, val eTag: Option[String])

当图书被保留时,会生成ID和电子标记,因此在保留ideTag之后始终是Some的实例。由于这些Option,使用持久书籍更加困难,因为我可以确定它们是Some,所以这种困难似乎不合适。我应该创建另一个类,NonPersistedBook没有ideTag字段,并在用户创建新书并从Options中删除Book时使用其实例?当客户更新书籍时,它提供ID但不提供电子标签。我应该为这个案子开另一个班吗?

2 个答案:

答案 0 :(得分:1)

Metarest project使用宏来解决此问题,以生成模型的RESTful风格。

答案 1 :(得分:0)

有助于在域之后为代码建模。

作为一个经验法则,如果元素的字段必须存在于每个有效实体,则不要使用Option。 如果存在没有该信息的实体的有效实例,请使用选项。

使用case classes有助于您不需要编写val,获取匹配器,大多数scala序列化库都可以直接使用。

建议如何描述书籍元素:

case class Book(id: UUID, name: String, eTag: String)

可能的路线:

POST /book/<name>

因此,您自己设置其他值不需要有效负载。 当给出其他值时,您只有Book