2017-10-12 9 views
3

Comment gérer une opération de publication échouée en utilisant Giraffe?Comment gérer une opération de publication échouée en utilisant Giraffe?

Quelle est la pratique recommandée pour une opération de post échec avec Giraffe?

let private registrationHandler = 
    fun(context: HttpContext) -> 
     async { 
      let! data = context.BindJson<RegistrationRequest>() 
      let response = register data |> function 
             | Success profile -> profile 
             | Failure   -> ??? 
      return! json response context 
     } 

Plus précisément, si le serveur ne parvient pas à écrire des données dans une base de données, que dois-je retourner au client (qui compilation).

Répondre

4

Le gestionnaire doit retourner quelque chose, mais il ne doit pas toujours être le même objet sérialisé. J'ai seulement eu un coup d'oeil rapide à Giraffe, mais en utilisant une approche similaire de Suave avec les exemples de Giraffe ici: https://github.com/dustinmoris/Giraffe#setstatuscode, je ferais quelque chose comme ceci:

type ErrorResponse = { message: string; ... } 

let private registrationHandler = 
    fun(context: HttpContext) -> 
     async { 
      let! data = context.BindJson<RegistrationRequest>() 
      match register data with 
      | Success profile -> 
       return! json profile context 
      | Failure -> 
       let response = { message = "registration failed"; ... } 
       return! (setStatusCode 500 >=> json response) context 
     }