3 votes

Comment gérer l'échec d'une opération postale avec Girafe ?

Comment gérer l'échec d'une opération postale avec Girafe ?

Quelle est la pratique recommandée en cas d'échec d'une post-opération avec Girafe ?

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 renvoyer au client (qui compilera) ?

4voto

Honza Brestan Points 3316

Le gestionnaire doit retourner quelque chose, mais il ne doit pas toujours s'agir du même objet sérialisé. Je n'ai jeté qu'un coup d'œil rapide à Girafe, mais j'utilise une approche similaire à celle de Suave avec les exemples de Girafe ici : https://github.com/dustinmoris/Giraffe#setstatuscode je ferais quelque chose comme ça :

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
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X