在Swift中进行REST API调用

 百变精灵2596 发布于 2023-01-08 13:44

我正在尝试使用Swift对REST API进行GET调用,并试图遵循大量的教程,但无法弄明白.或者因为我无法弄清楚如何将所有Obj-C翻译成Swift,或者因为这些方法的一半被弃用了.有谁知道如何进行调用,并解析返回的JSON数据?

7 个回答
  • 以下是在swift中使用NSURLSession的REST API请求的完整代码

    For GET Request
    
     let configuration = NSURLSessionConfiguration .defaultSessionConfiguration()
        let session = NSURLSession(configuration: configuration)
    
    
        let urlString = NSString(format: "your URL here")
    
        print("get wallet balance url string is \(urlString)")
        //let url = NSURL(string: urlString as String)
        let request : NSMutableURLRequest = NSMutableURLRequest()
        request.URL = NSURL(string: NSString(format: "%@", urlString) as String)
        request.HTTPMethod = "GET"
        request.timeoutInterval = 30
    
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
    
        let dataTask = session.dataTaskWithRequest(request) {
            (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
    
            // 1: Check HTTP Response for successful GET request
            guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
                else {
                    print("error: not a valid http response")
                    return
            }
    
            switch (httpResponse.statusCode)
            {
            case 200:
    
                let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding)
                print("response is \(response)")
    
    
                do {
                    let getResponse = try NSJSONSerialization.JSONObjectWithData(receivedData, options: .AllowFragments)
    
                    EZLoadingActivity .hide()
    
                   // }
                } catch {
                    print("error serializing JSON: \(error)")
                }
    
                break
            case 400:
    
                break
            default:
                print("wallet GET request got response \(httpResponse.statusCode)")
            }
        }
        dataTask.resume()
    

    对于POST请求...

    let configuration = NSURLSessionConfiguration .defaultSessionConfiguration()
        let session = NSURLSession(configuration: configuration)
    
        let params = ["username":bindings .objectForKey("username"), "provider":"walkingcoin", "securityQuestion":securityQuestionField.text!, "securityAnswer":securityAnswerField.text!] as Dictionary<String, AnyObject>
    
        let urlString = NSString(format: “your URL”);
        print("url string is \(urlString)")
        let request : NSMutableURLRequest = NSMutableURLRequest()
        request.URL = NSURL(string: NSString(format: "%@", urlString)as String)
        request.HTTPMethod = "POST"
        request.timeoutInterval = 30
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")      
        request.HTTPBody  = try! NSJSONSerialization.dataWithJSONObject(params, options: [])
    
        let dataTask = session.dataTaskWithRequest(request)
            {
                (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
                // 1: Check HTTP Response for successful GET request
                guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
                    else {
                        print("error: not a valid http response")
                        return
                }
    
                switch (httpResponse.statusCode)
                {
                case 200:
    
                    let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding)
    
    
                    if response == "SUCCESS"
                    {
    
                    }
    
                default:
                    print("save profile POST request got response \(httpResponse.statusCode)")
                }
        }
        dataTask.resume()
    

    我希望它有效.

    2023-01-08 13:45 回答
  • Swift 4 - GET请求

    var request = URLRequest(url: URL(string: "http://example.com/api/v1/example")!)
    request.httpMethod = "GET"
    
    URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in
        do {
            let jsonDecoder = JSONDecoder()
            let responseModel = try jsonDecoder.decode(CustomDtoClass.self, from: data!)
            print(responseModel)
        } catch {
            print("JSON Serialization error")
        }
    }).resume()
    

    不要忘记配置应用程序传输安全设置以将域添加到例外,并在不使用HTTPS的情况下访问端点时允许不安全的http请求.

    您可以使用http://www.json4swift.com/等工具从JSON响应中自动生成可编码映射.

    2023-01-08 13:46 回答
  • 编辑为swift 2

    let url = NSURL(string: "http://www.test.com")
    
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            print(NSString(data: data!, encoding: NSUTF8StringEncoding))
        }
    
        task.resume()
    

    2023-01-08 13:46 回答
  • 斯威夫特4

    let params = ["username":"john", "password":"123456"] as Dictionary<String, String>
    
    var request = URLRequest(url: URL(string: "http://localhost:8080/api/1/login")!)
    request.httpMethod = "POST"
    request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
        print(response!)
        do {
            let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
            print(json)
        } catch {
            print("error")
        }
    })
    
    task.resume()
    

    2023-01-08 13:46 回答
  • 我认为NSURLSessionapi在这种情况下更适合.因为如果你编写swift代码,你的项目目标至少是iOS 7,而iOS 7支持NSURLSessionapi.无论如何这里是代码

    let url = "YOUR_URL"
    
    NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)) { data, response, error in
        // Handle result
    }.resume()
    

    2023-01-08 13:46 回答
  • 你可以这样做:

    var url : String = "http://google.com?test=toto&test2=titi"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"
    
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary
    
        if (jsonResult != nil) {
            // process jsonResult
        } else {
           // couldn't load JSON, look at error
        }
    
    
    })
    

    编辑:对于人们有这个问题可能你的JSON流是一个数组[]而不是一个对象{}所以你必须改变jsonResult NSArray而不是NSDictionary

    2023-01-08 13:46 回答
  • 斯威夫特3.0

    let request = NSMutableURLRequest(url: NSURL(string: "http://httpstat.us/200")! as URL)
    let session = URLSession.shared
    request.httpMethod = "GET"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    
    let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
          if error != nil {
              print("Error: \(String(describing: error))")
          } else {
              print("Response: \(String(describing: response))")
          }
     })
    
     task.resume()
    

    2023-01-08 13:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有