J'essaie de recréer les paramètres de ce Postman pour poster dans Alamofire. C'est la première fois que je vois une API qui nécessite à la fois des paramètres et un corps avec Raw Json. J'en ai fini avec la collecte et le formatage de mes données (soit en utilisant Json SwiftyJSON ou le dictionnaire [String : Any]
/Parameters
) pour cette exigence.Postman Body Raw Demande à Swift Alamofire
Pendant que je l'ai vu une question semblable à ceci: Postman request to Alamofire request mais il n'a pas une réponse valable. Supposons que je suis assez expérimenté avec les données de publication/obtention/etc de diverses API mais je ne sais pas comment transmettre des données brutes comme dans la photo ci-dessus. S'il vous plaît consulter mes commentaires aussi dans le code.
Voici ce que je fais avec ma fonction de cette demande:
/** Apply to job with Shift.
* This service function creates a json data for applying.
*/
func someFuncService(_ job: Job, daySchedules: [(Int, String, Schedule)], withBlock completion: @escaping JobServiceCommonCallBack) {
AuthService.someFunc { (currentCustomer, accessToken) in
guard let lalala = currentCustomer?.id,
let accessT = accessToken else {
completion(LalaErrors.currentCustomerError)
return
}
guard let jobId = job.id else {
completion(LalaErrors.modelError)
return
}
let coreService = LalaCoreService()
let applicantEndpoint = LalaCoreService.Endpoint.Applicant
let parameters = [
"param1" : customerId,
"param2" : jobId,
"accessToken" : accessToken,
"shift" : self.generateDataFromDaySchedules(daySchedules) // this returns [String : Any], can be printed into Json using JSON(x)
] as Parameters
GPLog(classSender: self, log: "FINAL PARAMETER: \(parameters)")
coreService.request = Alamofire.request(
applicantEndpoint,
method: .post,
parameters: parameters,
encoding: URLEncoding.default, // I already have tried .httpbody too.
headers: nil
)
coreService.request {
(response, result) in
if let error = result?.error {
if response!.statusCode == 500 {
completion(GPKitError.newError(description: "Failed to apply. Please contact the admin."))
return
}
completion(error)
return
}
// Success
completion(nil)
return
}
}
}
EDIT: La question est donc, ce que je fais mal ici? L'API me renvoie le code d'état 500 erreur interne du serveur.
Quel est l'en-tête unique vous configurez dans Postman? Vous définissez les en-têtes sur «nil» dans votre requête Alamofire. –
En-tête dans mon postier est 'Content-Type'' application/x-www-form-urlencoded' qui n'a pas d'importance. Essayé de supprimer cela dans Postman et la demande fonctionne. Toutes mes demandes ne nécessite aucun en-tête. – Glenn
Je voudrais encore essayer dans Alamofire si l'utilisation de cette en-tête résout le problème. Définissez 'encoding' sur' URLEncoding.httpBody' et utilisez l'en-tête spécifié. Btw est 'Parameters' juste un typealias pour' [String: Any] '? –