干貨系列之零基礎(chǔ)搭建自測(cè)服務(wù)器

我是服務(wù)器小白。不了解真正的服務(wù)器是怎么搭建的迁沫。但是小編在本文將會(huì)講述如何在十分鐘內(nèi)芦瘾,在自己的電腦上搭建出服務(wù)器。并帶領(lǐng)大家使用搭建好的服務(wù)器集畅〗埽總之,干貨滿(mǎn)滿(mǎn)挺智。

本文源碼點(diǎn)此下載:源碼
注:本文客戶(hù)端使用AFNetworking框架來(lái)請(qǐng)求測(cè)試服務(wù)器數(shù)據(jù)藐吮。


本文目錄

1. 搭建測(cè)試服務(wù)器
2. 測(cè)試POST、GET網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求
3. 在實(shí)際項(xiàng)目中的運(yùn)用

1. 搭建測(cè)試服務(wù)器

小編選擇moco基于 Java 開(kāi)發(fā)的開(kāi)源項(xiàng)目來(lái)搭建測(cè)試服務(wù)器逃贝。

moco使用的場(chǎng)景是什么呢谣辞?

  1. 我是一個(gè)企業(yè)級(jí)軟件開(kāi)發(fā)人員,每次面對(duì)集成就是我頭疼開(kāi)始的時(shí)候沐扳,漫長(zhǎng)集成拉鋸戰(zhàn)拖延了我們的進(jìn)度泥从。幸好有了moco剑辫,幾行配置就可以模擬一個(gè)服務(wù)钧椰,我再也不需要看集成服務(wù)團(tuán)隊(duì)的臉色了葵诈。
  1. 我是一個(gè)移動(dòng)開(kāi)發(fā)人員涤伐,老板催得緊,可服務(wù)器端開(kāi)發(fā)進(jìn)度慢厘唾,我空有一個(gè)漂亮的iPhone應(yīng)用闸盔,發(fā)揮不出作用扳还。幸好有了moco哄陶,很快就可以搭建出一個(gè)模擬服務(wù)帆阳,我再也不用把生命浪費(fèi)在無(wú)效的等待上了。
  1. 我是一個(gè)前端開(kāi)發(fā)人員屋吨,做Inception的時(shí)候蜒谤,客戶(hù)總想看到一個(gè)完整的應(yīng)用演示,可哪有時(shí)間開(kāi)發(fā)后端服務(wù)爸寥拧鳍徽!幸好有了moco,幾下就可以弄出一個(gè)模擬服務(wù)敢课,我做的頁(yè)面一下就有了生命力阶祭。

moco搭建出模擬服務(wù)器是不是很麻煩氨炼拧?

moco有兩種使用模式:

  • API 模式
  • 獨(dú)立運(yùn)行模式

如果你編寫(xiě)的是個(gè)Java應(yīng)用(或是以其它JVM上的語(yǔ)言編寫(xiě)的應(yīng)用)濒募,你可以采用直接調(diào)用API接剩。

本文采用的是獨(dú)立運(yùn)行模式,點(diǎn)擊此處下載moco服務(wù)端(其實(shí)就是一個(gè)jar包)萨咳,當(dāng)然你可以從官網(wǎng)下載源代碼按照官網(wǎng)的說(shuō)明編譯生成jar包。小編不想搞的過(guò)于復(fù)雜疫稿,我們需要的快速搭建測(cè)試服務(wù)器培他。小編選擇直接下載jar包。

測(cè)試打印Hello world!

注意:為了易于表述遗座,小編在桌面上創(chuàng)建moco-server文件夾舀凛,我把剛才下載的moco-runner-0.10.2-standalone.jar。其中0.10.2代表的是當(dāng)前的版本號(hào)途蒋。

moco-server文件夾里猛遍,創(chuàng)建一個(gè)test.json文件(.json是文件后綴)。

創(chuàng)建文件.jpg

在文件里輸入以下內(nèi)容后保存号坡。

[
   {
    "response": {
       "text": "Hello world!"
    }
   }
]

注:一定要是英文 " 引號(hào) 懊烤,否則會(huì)報(bào)錯(cuò)。使用文件編輯經(jīng)常會(huì)莫名其妙的改變引號(hào)宽堆,所以小編建議使用右鍵-打開(kāi)方式-選擇Xcode編輯內(nèi)容腌紧。

打開(kāi)終端,輸入以下內(nèi)容:

//指向moco-server當(dāng)前目錄
cd /Users/macOne/Desktop/moco-server 

回車(chē)后再輸入以下內(nèi)容:

java -jar moco-runner-0.10.2-standalone.jar start -p 12306 -c test.json

出現(xiàn)下圖表示運(yùn)行成功:

命令行內(nèi)容.png

在瀏覽器流輸入:http://localhost:12306可以看到"Hello World!"字樣畜隶。

說(shuō)明模擬服務(wù)器是可以正常使用的壁肋。到此服務(wù)器就搭建完畢了。是不是很簡(jiǎn)單籽慢!

2. 測(cè)試POST浸遗、GET網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求

小編將一步步帶你使用配置文件配置網(wǎng)絡(luò)請(qǐng)求和響應(yīng)數(shù)據(jù)。

小編在本篇文章介紹客戶(hù)端常用Http請(qǐng)求方法 GetPost箱亿。moco同樣也支持PUT跛锌、 DELETE方法。

  • Get 方法 不帶參數(shù)
    在test.json里輸入一下內(nèi)容
[
 {
    "response": {
       "text": "Hello world!"
    }
 },
 {
     "request": {
        "method" : "get",
        "uri": "/getMethod"
     },
    "response": {
        "text": "This is a Get Method!"
     }
 }
]

在瀏覽器里輸入http://localhost:12306/getMethod 回車(chē)后結(jié)果如下:

This is a Get Method!
  1. request 請(qǐng)求
    有14個(gè)固定的屬性:method, headers, json, factory, uri, text, cookies, xpaths, json_paths, version, file, queries, path_resource, forms届惋。一定要遵循這些方法察净。 常用的method(請(qǐng)求方式), headers(heads參數(shù)),uri(url地址),file(指定調(diào)用的請(qǐng)求文件), queries(請(qǐng)求帶參)forms(表單內(nèi)容)盼樟。

  2. response 響應(yīng)
    有12個(gè)固定屬性:status, attachment, headers, version, factory, file, text, proxy, cookies, json, latency, path_resource氢卡。
    在本篇文章中用到file,text

通過(guò)命令返回的數(shù)據(jù)晨缴,可以看到當(dāng)前的數(shù)據(jù)請(qǐng)求和返回的信息:

模擬Get請(qǐng)求.jpg
  • Get方法 帶參數(shù)
    默認(rèn)的請(qǐng)求方式是Get译秦,你可以不用寫(xiě)method
 {
     "request": {
        "uri": "/getMethodWithParams",
        "queries": {
             "param1": "1",
             "param2": "2"
        }
     },
    "response": {
        "text": "This is a method with params!"
     }
 }

注意同一級(jí)的屬性后要有 " , ",支持運(yùn)行過(guò)程中編輯文件內(nèi)容筑悴。編輯的內(nèi)容是否合法在終端上會(huì)有提示们拙。

在瀏覽器里輸入http://localhost:12306/getMethodWithParams?param1=1&param2=2 回車(chē)后結(jié)果如下:

This is a method with params!
  • Post 方法

寫(xiě)一個(gè)復(fù)雜的帶有headers,body的Post 請(qǐng)求方法:

{
     "request": {
        "method" : "post",
        "uri": "/postMethod",
        "headers" : {
             "content-type" : "application/json",
             "sessionid": "e566288ba77de98d"
         },
        "forms" :{
          "name" : "Airfei",
          "password" : "123456"
        }
     },
    "response": {
        "text": "This is a POST Method!"
     }
 }

小編是通過(guò)Paw http客戶(hù)端請(qǐng)求工具進(jìn)行驗(yàn)證。

post 請(qǐng)求驗(yàn)證.jpg

以上就是常用的使用配置數(shù)據(jù)方法阁吝。此test.json文件從此處查看砚婆。

3. 在實(shí)際項(xiàng)目中的運(yùn)用

我要?jiǎng)?chuàng)建一個(gè)項(xiàng)目,結(jié)合此項(xiàng)目使用moco服務(wù)器突勇。此項(xiàng)目中包括登陸界面和資產(chǎn)列表界面装盯。

在實(shí)際項(xiàng)目中,請(qǐng)求接口數(shù)據(jù)比較多甲馋。因此把所有的配置放在同一個(gè)文件里埂奈,是非常不合適的。需要進(jìn)行全局配置定躏,參見(jiàn)官網(wǎng)的Global Settings账磺。

前期準(zhǔn)備,寫(xiě)配置文件
在moco-server文件夾創(chuàng)建settings.json,同時(shí)創(chuàng)建login和asset兩個(gè)文件夾(為了方便查找)痊远。

  • 在login文件夾內(nèi)創(chuàng)建login.jsonlogin_response.json兩個(gè)文件垮抗。
  • 在asset文件夾內(nèi)創(chuàng)建assetList.jsonassetList_response.json兩個(gè)文件。

  1. settings.json文件輸入以下內(nèi)容:
//是不是像導(dǎo)入文件頭文件
[
    {
        "include" : "login/login.json"
    },
    {
        "include" : "asset/assetList.json"
    }
]
  1. login.json輸入以下內(nèi)容:
[
  {
    "request" :
    {
      "uri" : "/assetApp/login",
      "method" : "get",
      "queries" :
        {
         "username" : "Airfei",
         "password" : "123456"
        }
    },
    "response" :
    {
      "file" : "./login/login_response.json"
    }
  }
]
  1. login_response.json 輸入以下內(nèi)容:
//返回結(jié)果OK
[
  {
    "status" : "OK"
  }
]
  1. assetList.json內(nèi)容
//請(qǐng)求資產(chǎn)列表接口
[
  {
    "request" :
    {
      "uri" : "/assetApp/assetList",
      "method" : "post",
      "headers" : {
          "content-type" : "application/json",
          "sessionid": "e566288ba77de98d"
      }
 
    },
    "response" :
    {
      "file" : "./asset/assetList_response.json"
    }
  }
]
  1. assetList_response.json 內(nèi)容
//資產(chǎn)列表清單
[
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "空調(diào)",
    "assetcode": "4435-22333111",
    "barcode": "4435-22333111",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "2",
    "addrname": "河北省xxxxxxx",
    "cost": "3500"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "電腦",
    "assetcode": "4435-2234566",
    "barcode": "4435-2234566",
    "manufacturer": "北京市xxxxx",
    "unit": "臺(tái)",
    "amount": "7",
    "addrname": "河北省xxxxxxx",
    "cost": "4500"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "飲水機(jī)",
    "assetcode": "4735-22333123",
    "barcode": "4735-22333123",
    "manufacturer": "上海市xxxxx",
    "unit": "臺(tái)",
    "amount": "5",
    "addrname": "河北省xxxxxxx",
    "cost": "1250"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "打印機(jī)",
    "assetcode": "4435-2334567",
    "barcode": "4435-2334567",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "5",
    "addrname": "河北省xxxxxxx",
    "cost": "2760"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "電腦桌",
    "assetcode": "4435-2267998",
    "barcode": "4435-2267998",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "4",
    "addrname": "河北省xxxxxxx",
    "cost": "650"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "手機(jī)",
    "assetcode": "4435-22345881",
    "barcode": "4435-22345881",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "2",
    "addrname": "河北省xxxxxxx",
    "cost": "5500"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "柜式空調(diào)",
    "assetcode": "4435-6666444",
    "barcode": "4435-6666444",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "1",
    "addrname": "河北省xxxxxxx",
    "cost": "8800"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "立式衣架",
    "assetcode": "4435-8944444",
    "barcode": "4435-8944444",
    "manufacturer": "天津市xxxxx",
    "unit": "個(gè)",
    "amount": "2",
    "addrname": "河北省xxxxxxx",
    "cost": "300"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "加濕器",
    "assetcode": "4435-3277778",
    "barcode": "4435-3277778",
    "manufacturer": "天津市xxxxx",
    "unit": "臺(tái)",
    "amount": "5",
    "addrname": "河北省xxxxxxx",
    "cost": "180"
  },
  {
    "assettype": "TD固定資產(chǎn)",
    "assetname": "轉(zhuǎn)椅",
    "assetcode": "4435-7844442",
    "barcode": "4435-7844442",
    "manufacturer": "天津市xxxxx",
    "unit": "個(gè)",
    "amount": "14",
    "addrname": "河北省xxxxxxx",
    "cost": "400"
  }
]

配置完以上內(nèi)容后在終端里輸入以下方法

cd /Users/macOne/Desktop/moco-server
//注意 -g 不是 -c
java -jar moco-runner-0.10.2-standalone.jar start -p 12306 -g settings.json

得到以下內(nèi)容說(shuō)明你的配置文件沒(méi)有錯(cuò)誤碧聪。Server is started!

INFO  Server is started at 12306
INFO  Shutdown port is 51783

創(chuàng)建客戶(hù)端并使用AFNetwoking網(wǎng)絡(luò)請(qǐng)求
登錄界面其實(shí)輸入用戶(hù)名和密碼請(qǐng)求服務(wù)器驗(yàn)證是否通過(guò)借宵。其實(shí)也可以返回一些認(rèn)證信息。用于校驗(yàn)以后的所有請(qǐng)求的合法性矾削。

客戶(hù)端上的登錄數(shù)據(jù)請(qǐng)求代碼:

-(void)requestLogin
{
    
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    
    NSString *url=@"http://localhost:12306/assetApp/login";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    //請(qǐng)求所帶參數(shù)
    NSDictionary *dic = @{@"username":_name,
                          @"password":_pwd
                          };
    

    [manager GET:url parameters:dic success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        
        NSString *receiveStr = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSData * data = [receiveStr dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
  
        hud.mode = MBProgressHUDModeText;
        hud.labelText = @"登錄成功";
        hud.removeFromSuperViewOnHide = YES;
  
        NSLog(@"result:%@",jsonDict);
        //做一個(gè)處理,1秒后刷新壤玫。也可以不用加
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            //隱藏hub
            [hud hide:YES];
            //轉(zhuǎn)到下一界面
            [[AppDelegate shareDelegate] setupMainViewController];


        });

    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {

        hud.mode = MBProgressHUDModeText;
        hud.labelText = @"登錄失敗";
        hud.removeFromSuperViewOnHide = YES;
        [hud hide:YES afterDelay:1.0];
        NSLog(@"登錄失敗");
    }];
}

登錄成功后,進(jìn)入資產(chǎn)列表界面哼凯。POST請(qǐng)求服務(wù)器獲取資產(chǎn)列表數(shù)據(jù),在請(qǐng)求數(shù)據(jù)需要帶上headers參數(shù)用于驗(yàn)證請(qǐng)求的合法性欲间。請(qǐng)求代碼如下:

-(void)requestAssetList
{
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    NSString *url=@"http://localhost:12306/assetApp/assetList";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    //帶有headers參數(shù)
    [manager.requestSerializer setValue:@"e566288ba77de98d" forHTTPHeaderField:@"sessionid"];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    [manager POST:url parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        NSString *receiveStr = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSData * data = [receiveStr dataUsingEncoding:NSUTF8StringEncoding];
        _assetArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        
        //做一個(gè)處理,1秒后刷新。模擬請(qǐng)求數(shù)據(jù)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            //刷新界面
            [_tableView reloadData];
            //隱藏hub
            [hud hide:YES];
        });
        
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
        hud.mode = MBProgressHUDModeText;
        hud.labelText = @"請(qǐng)求資產(chǎn)列表失敗";
        hud.removeFromSuperViewOnHide = YES;
        [hud hide:YES afterDelay:1.0];
    }];
}

源碼點(diǎn)擊這里獲得断部。
如果覺(jué)得文章還不錯(cuò)猎贴,請(qǐng)點(diǎn)一波關(guān)注吧!干貨系列會(huì)繼續(xù)給你帶來(lái)更多實(shí)用的東西蝴光。

感謝

可輕松搭建的測(cè)試服務(wù)器 Moco

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末她渴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔑祟,更是在濱河造成了極大的恐慌趁耗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疆虚,死亡現(xiàn)場(chǎng)離奇詭異苛败,居然都是意外死亡满葛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)罢屈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘀韧,“玉大人,你說(shuō)我怎么就攤上這事缠捌〕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵曼月,是天一觀的道長(zhǎng)谊却。 經(jīng)常有香客問(wèn)我,道長(zhǎng)十嘿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任岳锁,我火速辦了婚禮绩衷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘激率。我一直安慰自己咳燕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布乒躺。 她就那樣靜靜地躺著招盲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘉冒。 梳的紋絲不亂的頭發(fā)上曹货,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音讳推,去河邊找鬼顶籽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛银觅,可吹牛的內(nèi)容都是我干的礼饱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼究驴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼镊绪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起洒忧,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝴韭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后熙侍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體万皿,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摧找,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牢硅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬耘。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖减余,靈堂內(nèi)的尸體忽然破棺而出综苔,到底是詐尸還是另有隱情,我是刑警寧澤位岔,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布如筛,位于F島的核電站,受9級(jí)特大地震影響抒抬,放射性物質(zhì)發(fā)生泄漏杨刨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一擦剑、第九天 我趴在偏房一處隱蔽的房頂上張望妖胀。 院中可真熱鬧,春花似錦惠勒、人聲如沸赚抡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涂臣。三九已至,卻和暖如春售担,著一層夾襖步出監(jiān)牢的瞬間赁遗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工族铆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吼和,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓骑素,卻偏偏與公主長(zhǎng)得像炫乓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子献丑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理末捣,服務(wù)發(fā)現(xiàn),斷路器创橄,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)箩做、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評(píng)論 4 62
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,916評(píng)論 6 13
  • 哈哈妥畏,來(lái)點(diǎn)我鞍畎睢安吁!
    小小作手閱讀 112評(píng)論 1 1