如何在 Alamofire 中使用 PUT 请求

Posted

技术标签:

【中文标题】如何在 Alamofire 中使用 PUT 请求【英文标题】:How to use PUT request in Alamofire 【发布时间】:2018-09-13 06:23:13 【问题描述】:

我是 swift 新手,我也在尝试使用 Alamofire 从 API 调用数据。我对如何使用 PUT 请求 来更新数据感到很困惑。我已经在 SO 中阅读了一些解决方案,但我不知道我将如何应用到我的应用程序中。我正在创建一个活动应用程序,场景应该是,当参与者单击 签入 按钮时,它会将 registered_flag 更新为 true,这意味着参与者将标记为 Registered 按钮将更改为 Check Out。我真的不知道我的 API 服务是否正确。希望你能帮助我。非常感谢。

事件参与者的 JSON 中的注册标志应在 checkInOutButton 后更新一次


    "event_name": "Q & A",
    "event_participants": [
        
            "participant_id": "70984656-92bc-4c36-9314-2c741f068523",
            "employee_number": null,
            "last_name": "Surname",
            "first_name": "FirstName",
            "middle_name": null,
            "display_name": "Surname, FirstName ",
            "department_name": "Medical Informatics",
            "position_name": "Application Developer",
            "registered_flag": true,
            "registered_datetime": "2018-09-13T08:54:40.150",
            "registration_type": 1,
            "delete_flag": false,
            "manual_reg_flag": false,
            "out_flag": false,
            "out_datetime": null,
            "classification": 6,
            "others": "Guest"
          
        

更新 JSON 以进行签到


   "registered_flag": true,
   "registration_type": 1

updateType

enum UpdateParticipantType: String 

case checkIn = "Check In"
case checkOut = "Check Out"

UpdateParticipant 的 APIService

 func updateParticipant(updateType: UpdateParticipantType,
                       participantID: String,
                       successBlock: @escaping ([Attendee]) -> Void,
                       failureBlock: @escaping (Error) -> Void)



   let updateParticipantURL = URL(string: "\(REGISTER_PARTICIPANT_URL)/\(updateType)/\(participantID)")

    Alamofire.request(updateParticipantURL!, method: .put).responseJSON  (response) in
        print(response)

        if let error = response.error
        
            failureBlock(error)
            print(error)
            return
        

        if let jsonArray = response.result.value as? [[String : Any]] 
            for anItem in jsonArray 
                if let eventparticipants = anItem["event_participants"] as? [[String : Any]] 
                    var extractedAttendees = [Attendee]()
                    for participants in eventparticipants
                        let success = Attendee.init(JSON: participants)
                        extractedAttendees.append(success!)
                    
                    successBlock(extractedAttendees)
                
            
        
    

【问题讨论】:

你需要通过put请求在服务器上发送JSON to update for check in吗? @inokey 是,默认情况下是 json 中的 registered_flag : false,一旦用户单击签入按钮,registered_flag 就会为真。 您需要将其传递给您的 .request parameters 参数 @inokey 你有任何代码参考以便我可以轻松理解吗? 添加示例作为答案 【参考方案1】:

根据Alamofire 文档:

let parameters: Parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
 ]

Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)

对于给定的 json

 
    "registered_flag": true,
    "registration_type": 1
 

let parameters: Parameters = [
     "registered_flag": true
     "registration_type": 1
 ]

【讨论】:

谢谢。我会在我的代码中添加这些参数吗?我的jsonArray 没有变化? 序列化代码没有变化。它与从服务器获取响应以及向服务器发送参数有关。所以没有变化。

以上是关于如何在 Alamofire 中使用 PUT 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 alamofire 实现 put http 请求

如何在 Swift 中使用 Alamofire 将参数作为正文发送到 PUT 方法

使用 Alamofire 2.0 请求失败

Alamofire 放置请求

Swift AlamoFire 5 不会执行请求

iOS swift json PUT请求字符串数组在参数中