iOS 开发,Mock 服务器接口

·  阅读 2550
iOS 开发,Mock 服务器接口

更新,

采用 Moya 大法好

Moya 的测试功能,设计的特别好。通过 sampleData

这样使用:

设置

    // 正常部分
    static let netHud = MoyaProvider<NetHud>()
    
    // 数据打桩部分
    static let stubbingProvider = MoyaProvider<NetHud>(stubClosure: MoyaProvider.immediatelyStub)


var sampleData: Data {
        var example = "Half measures are as bad as nothing at all.".data(using: String.Encoding.utf8)!
        switch self {
        case .test:
            do {
                if let path = Bundle.main.url(forResource: "one", withExtension: "plist"){
                    example = try Data(contentsOf: path)
                }
            } catch {}
            
        default:
            break
        }
        return example
    }
复制代码
调用
func request(_ callback: @escaping (General<Data>) -> Void){
        let debug = true
        
        if debug{
            stubbingProvider.request(.test){ (result) in
                do{
                     let data = try result.get().data
                     let dict = try PropertyListSerialization.propertyList(from:data, format: nil) as! [String:Any]
                    // handle data
                    let decoder = PropertyListDecoder()
                    let info = try decoder.decode(GeneralSingle<PracticeList>.self, from: data)
                    callback(info)
                 }
                 catch let error as NSError{
                     print(error)
                 }
            }
        }
        else{
            netHud.request(.test){ (result) in
                    do{
                        let data = try result.get().data
                        let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions())
                        // handle data
                        let info = try Base.decoder.decode(GeneralSingle<PracticeList>.self, from: data)
                        callback(info)
                    }
                    catch let error as NSError{
                        print(error)
                    }
            }
        }
        
        
    }

复制代码

原文:


背景: 后端工程师有时候忙,不能给前端工程师准备合适的开发数据,

这个时候,就需要 Mock Server 了

分两步,

  • 获取数据,根据自己的需求,修改数据

  • 提供数据


第一步,获取数据

根据自己开发的需求修改

先把接口请求到的 JSON 落库,


// json 转 plist, 放在沙盒的 Document 目录下

        do{
            let json = try JSONSerialization.jsonObject(with: self, options: JSONSerialization.ReadingOptions())
            if let dict = json as? [String: Any]{
                let src = dict as NSDictionary
                let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
                let path = documentsURL.appendingPathComponent("one.plist")
                let result = src.write(to: path, atomically: true)
                print(result)
            }
        }
        catch let error{
            print("gg 了, \(error)")
        }
复制代码

如果是直接跑模拟器,打印路径,直接就可以找到 Mac 上的 plist 文件.

直接跑真机,可以通过 Woodpecker, 同步文件到 Mac 上。


第二步,提供数据

先要把下载获取到的 json 文件,添加在 project 里面,

run 的时候,就打在 Bundle 里面了

func request(_ callback: @escaping (GeneralSingle<PracticeList>) -> Void){
        
        
        let debug = true
        guard debug == false else {
        
        // 新的接口请求逻辑,走本地的,包含在 Bundle 里面的 plist 文件
            do{
                if let path = Bundle.main.url(forResource: "one", withExtension: "plist"){
                    let data = try Data(contentsOf: path)
                    let decoder = PropertyListDecoder()
                    let info = try decoder.decode(GeneralSingle<PracticeList>.self, from: data)
                    callback(info)
                }
            }
            catch let error as NSError{
                print(error)
            }
            return
        }
        
        
        
        // 原来逻辑,走网络请求
        AF.request(RequsetURL.youOwn, method: .get, headers: AF.bearer).response { (resp) in
         // ... 
复制代码
分类:
iOS
标签:
分类:
iOS
标签: