Quelle est la manière idiomatique dans Scala de taper une API qui peut renvoyer ou non des résultats? Je peux simplement taper Futur [Option [A]] et retourner un Aucun s'il n'y a pas de résultats, mais cela rendra les choses un peu plus verbeuses pour les clients API parce qu'il doit faire un appariement de formes (ou d'autres techniques comme pliage) sur l'option retournée. Toutefois, les contrats à terme nous donnent déjà un moyen de dire qu'il n'y a pas de résultats qui font échouer. Mais je ne sais pas si c'est une façon correcte ou expressive de dire que l'appel ne renvoie pas de résultats.Utilisez Future.successful (None) vs Future.failed (new Exception()) pour une API qui peut ne renvoyer aucun résultat?
trait SomeAPI {
def fetch(): Future[String]
}
class NoResultsException extends Exception
object APIImpl extends SomeAPI {
def asyncDBCall(): Future[List[String]] = ???
override def fetch(): Future[String] = asyncDBCall().map(r => if (r.isEmpty) throw new NoResultsException() else r.head)
}
Au début, il semble que les deux options sont acceptables et la décision finale peut être juste une question de préférence personnelle, mais peut-être que je me manque quelque chose et faire un avenir n'est pas une bonne option.
[Reactivemongo] (http://reactivemongo.org/releases/0.12/documentation/tutorial /find-documents.html) renvoie 'Future [Option [T]]'. Je suppose que ce serait Scala idiomatique, au lieu de «null» utiliser «Option», «Soit» ou tout ce qui vous convient. –