Bonjour,
Je suis actuellement l’excellent cours sur Vapor.
J’ai construit un début de petit WebService tout simple pour gérer une liste de course à plusieurs. (Si je peux gagner du temps quand je vais en course avec mes enfants histoire d’avoir encore plus de temps pour coder…)
Par contre je galère un peu pour trouver une fonction dans mon appli pour mettre à jour les objets dans Vapor/Fluent. Si j’ai bien compris, il s’agit de la commande PUT.
Voici mon code:
Dans Vapor:
struct PurchaseController: RouteCollection, Content {
func boot(routes: RoutesBuilder) throws {
let purchases = routes.grouped("purchases")
purchases.get(use: index)
purchases.post(use: create)
purchases.group(":purchaseID") { purchase in
purchase.delete(use: delete)
purchase.put(use:update)
}
purchases.delete(use:deleteAll)
guard let id = req.parameters.get("purchaseID", as: UUID.self) else {
throw Abort(.badRequest)
}
let input = try req.content.decode(Purchase.self)
return Purchase.find(id, on: req.db)
.unwrap(or: Abort(.notFound))
.flatMap { purchase in
purchase.title = input.title
purchase.quantity = input.quantity
purchase.completed = input.completed
return purchase.update(on: req.db)
.map { Purchase(id: purchase.id, title: purchase.title, quantity: purchase.quantity, completed: purchase.completed) }
}
Code coté appli:
func updatePurchase(purchase: Purchase) {
let purchaseToUpdate = Purchase(id: purchase.id, title: purchase.title, quantity: purchase.quantity, completed: purchase.completed)
guard let purchasePosted = URL(string: "http://127.0.0.1:8080/purchases") else {return}
let encoder = JSONEncoder()
var request = URLRequest(url: purchasePosted)
request.httpMethod = "PUT"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? encoder.encode(purchaseToUpdate)
URLSession.shared.dataTask(with: request) { (data, response, error) in
if let data = data {
print("data = data")
print ("\(purchase.title) - \(purchase.quantity) - \(purchase.completed)")
let decoder = JSONDecoder()
if let item = try? decoder.decode(Purchase.self, from: data) {
print("Purchase uploaded ! \(item.title)")
} else {
print("Bad JSON received back !")
}
}
}.resume()
}
A chaque appel de fonction, je me retrouve avec mon print(« Bad JSON received back ! ») dans la console.
Dans PAW ma fonction Update fonctionne avec le PUT!
Si quelqu’un peut me débloquer ce serait cool.
En vous remerciant d’avance.
Bien à vous.