Lors de ce TP vous allez devoir livrer plusieurs versions successives d'une API de calcul de prix.
/id
(requête GET) doit retourner l'id de votre API qui est le nom de votre dépôt GitHub sour la forme { "id" : "it340-foo" }
/bill
(requête POST) doit permettre de calculer un prix en fonction d'un objet de paramètres envoyé à l'API en JSON dans le body de la requête. L'objet est de la forme { "prices" : [10, 20], "quantities" : [1, 2] }
. L'API doit retourner le prix total sous la forme { "total" : 50 }
.
En cas de problème, il est nécessaire de renvoyer un code d'erreur ainsi qu'un objet erreur de la forme { "error" : "error message" }
.
Nous allons maintenant gérer la TVA. Les reqêtes vers la route /bill
doivent donc maintenant obligatoirement contenir un paramètre country
qui représente le code du pays, de la forme { "prices" : [15.99, 11.99], "quantities" : [1, 2], "country" : "ES" }
.
Pour le calcul du prix, il faut appliquer la TVA dont le taux est indiqué dans le tableau ci-après.
Country | Code | Tax |
---|---|---|
Germany | DE | 20% |
United Kingdom | UK | 21% |
France | FR | 20% |
Italy | IT | 25% |
Spain | ES | 19% |
Poland | PL | 21% |
Romania | RO | 20% |
Netherlands | NL | 20% |
Belgium | BE | 24% |
Greece | EL | 20% |
Czech Republic | CZ | 19% |
Portugal | PT | 23% |
Hungary | HU | 27% |
Sweden | SE | 23% |
Austria | AT | 22% |
Bulgaria | BG | 21% |
Denmark | DK | 21% |
Finland | FI | 17% |
Slovakia | SK | 18% |
Ireland | IE | 21% |
Croatia | HR | 23% |
Lithuania | LT | 23% |
Slovenia | SI | 24% |
Latvia | LV | 20% |
Estonia | EE | 22% |
Cyprus | CY | 21% |
Luxembourg | LU | 25% |
Malta | MT | 20% |
Il faut mettre à jour le endpoint /bill
pour que l'on puisse appliquer une réduction qui dépend du prix total TTC. Le schéma de reduction est envoyé via l'objet de paramètres comme ceci : { "prices" : [15.99], "quantities" : [1], "country" : "ES", "discount" : "NO_DISCOUNT" }
. L'API doit retourner le prix total sous la même forme que précédemment : { "total" : 100.12 }
.
Il est à noter que pour assurer la rétro-compatibilité il doit être possible d'omettre le paramètre discount
et d'envoyer une requête de la forme { "prices" : [15.99, 11.99], "quantities" : [1, 2], "country" : "ES" }
comme précédemment, tout en obtenant le même résultat.
Voici les différents schémas de réduction.
0% de réduction.
|----------------+-------------|
Total | Reduction |
---|---|
>= 50 000 EUR | 15 % |
>= 10 000 EUR | 10 % |
>= 7 000 EUR | 7 % |
>= 5 000 EUR | 5 % |
>= 1 000 EUR | 3 % |
----------------+------------- |
30 % quelque soit le prix total.
Pour cette quatrième livraison on doit pouvoir spécifier dans quelle devise on veut payer, et votre API doit utiliser une API de calcul des cours pour calculer le prix dans la devise spécifiée. Voici un example de requête:
{ "prices" : [15.99, 11.99], "quantities" : [1, 2], "country" : "ES", "discount" : "NO_DISCOUNT", currency: "CAD" }
.
Encore une fois, il est à noter que pour assurer la rétro-compatibilité il doit être possible d'omettre le paramètre currency
et d'envoyer une requête de la forme { "prices" : [15.99, 11.99], "quantities" : [1, 2], "country" : "ES" }
ou { "prices" : [15.99, 11.99], "quantities" : [1, 2], "country" : "ES" }
comme précédemment, tout en obtenant le même résultat.
Personal website by Jean-Rémy Falleri is licensed under CC BY-NC-SA 4.0