半個月前不怕死的報名了 ithome 的連續三十天不中斷發文鐵人賽, 還報名了兩個主題,真的是太誇張了… 但是由於 ithome 的編輯器其實排版起來沒有很漂亮, 因此決定利用這邊先發文,再轉文到 ithome 的方式來處理, 比較順手一些,順便在這篇文章貼上規劃方向,topic 可能隨時會變,但大方向不變 第一次寫的主題都幾乎不是自己專精的技術, 規劃表如下: (Evernote 連結) https://www.evernote.com/l/AFFz7an43x1K46hErAgyJdD5K9BuFFMN9Dg 因此若有錯誤也請有看到的大大們多多幫忙指正囉! 有時候會因為比較忙,可能文章比較精簡一些,還請大家多多包涵 :P 有任何文章更新也會同步在此篇文章中! ##RESTful API Service: Day1 - [API-d1] - 定義 1 - 什麼是 REST/RESTful? Day2 - [API-d2] - 定義 2 - RESTful 的優點與要求 Day3 - [API-d3] - 使用時機與實際 API 參考 Day4 - [API-d4] - 使用技術與工具介紹及原因 Day5 - [API-d5] - [Server 番外篇] 建立自己的本機虛擬伺服器 1 - Vagrant + VirtualBox 安裝 Day6 - [API-d6] - [Server 番外篇] 建立自己的本機虛擬伺服器 2 - Ubuntu 基本設定與安裝 Node.

Continue reading

[API-d30] - 總結

總結三十天下來的 Restful API service 建置 其實接觸到的東西很廣泛 從 server 端到程式端,還有虛擬機器的使用都有沾到邊 其實不管是哪個領域都是要一點一滴累積起來的 以這次的開發技術來說, vagrant 方便在於我在和別人共享 server 環境時非常方便 自己在架測試環境時也可以先將乾淨的 web serser 打包起來 供日後隨時要用時開起來馬上 deploy 就可以使用 另外加上方便的網路設定, 在測試時非常方便 另外則是 nodejs, 這次會選擇 nodejs 主要也是想進入 javascript 的世界 nodejs 若作為一個後端程式語言來說,我認為是非常輕量且入門非常簡單 套一句最近常聽到的話 javascript is everywhere 不管是網頁前後端,nodejs 還可以拿來寫桌面應用、嵌入式系統 應用領域非常廣泛 也希望這門語言能夠更標準化,擺脫歷史包袱 看最近幾年的發展,其實我認為是勢在必行的 只缺一個領頭羊來帶領大家前往偉大的航道了! XD 希望三十天的分享能給大家帶來不一樣的感受~ 對了突然想到一件事,這個主題的副標最後一句是想要和 APP 結合 APP 在隔壁棚啦 XD

Continue reading

[Swift-d30] - 總結

30 天下來其實中間受到不少人幫忙 因為第一次寫 iOS 程式,對於 iOS 的基本運作流程還是詢問了不少同事 包含在隔壁棚用 Cocos2d 寫 2D 遊戲的 Andy 還有同事 Henry 和 Felix 都給予了很大的幫忙 最後這隻小 app 其實 code 的品質並沒有很好 主要還是因為寫來 demo 用的,以及老實講也沒什麼時間寫… 報兩個組別真的是很鐵人哪 還看到隔壁棚一次報三四個主題的大大 真是太厲害了 假設明年還會參賽的話,應該還是會以單一技術來鑽研吧! Swift 有蠻多特性是 Objective-C 所沒有的 如果有想在新專案嘗試的話 最好還是先多看看網路上的比較 避免踩到雷 像有一點是我們同事曾經踩到的雷 就是 NSDictionary V.S. Dictionary 兩者的速度可以差到 5, 6 倍以上 網路上搜尋也會發現有人在討論 Swift Dictionary 的效能差異 若要在新專案使用還是要查詢一下避免掉一些問題 另外還有就是 Swift on Xcode 的穩定度還是有待加強… 總而言之, 30 天結束了,ya!

Continue reading

接下來這篇就會比較偏 server 設定了! nginx 是一套伺服器軟體,和 apache 並駕齊驅 (其實我覺得 nginx >>> apache XD) 主要是 nginx 清量快速 我們要拿他幫 nodejs 處理接收 request 的部分,再將 request 導往 nodejs 所以感覺就會如下圖: 可以讓 nginx 當作是 load balancer, 透過 reverse proxy 的方式轉發 request 給 nodejs, 讓 nginx 承受流量 這就是我們今天要做的事情, 所以首先,我們就要先裝 nginx,因此就先進虛擬機吧! $ sudo apt-get update && sudo apt-get upgrade -y $ sudo apt-get install nginx 這樣就會安裝一個 nginx 了! Nginx 的設定檔都是放在 /etc/nginx/ 底下 個別網站的設定放在 /etc/nginx/sites-available 如果要讓該網站上線,則會將 /etc/nginx/sites-available 的設定檔 link 到 /etc/nginx/sites-enable

Continue reading

Github link 今天要處理刪除 其實超簡單的 只是想偷懶一下 XD 一樣將下列程式碼新增到 RestApi class: func deleteTodoList(completionHandler: ((NSDictionary!, NSError!) -> Void)!, todoId: String) { var session = NSURLSession.sharedSession() var request = NSMutableURLRequest(URL: NSURL(string: "http://192.168.1.158:3000/user/kerkerj/todos/\(todoId)")!) request.HTTPMethod = "DELETE" var err: NSError? request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue(self.API_key, forHTTPHeaderField: "API-Key") let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in if (error != nil) { return completionHandler(nil, error) } var error: NSError? let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary println(json) if (error !

Continue reading

Github 參考 接下來兩天要講 deploy 的部分 由於 deploy 的 script 其實非常的麻煩,因此我們就不提 deploy 的 script 了 我們只專注在 server 上需要什麼東西 今天要來看看 forever 這個套件 這個套件可以幫助 nodejs 的 server 遇上無預警的 server 掛掉時 會幫你自動重新啟動 nodejs 的 server 也就是說 假設說 nodejs 寫的 server 某個 route 有問題, 送 request 後會因為某些因素造成 server error 造成程式碼 crash 時 forever 的 monitor 會偵測到,並幫你自動重啟 server 至少不會造成其他正常存取 server 的使用者遭遇到 server down 的問題 這個套件可以選擇裝在 global 或是 project 在這邊我是選擇裝成 global 進到虛擬機 $ npm install -g forever p.

Continue reading

Github link 昨天做了 get list 今天就來做 新增和儲存吧! 可能有人會問說,那讀取一筆 todo 的 API 呢? 因為在這邊資料量少,所有的東西都可以從最外層的 list 拿到 所以雖然有換頁的動作,但是節省流量可以不需要實做這件事 在實際開發中也會如此,case by case,有些情況一次拿完回來處理最好 不過有些則不是~ 離題了, 以下是新增 todo 的程式碼: 先到 RestApi.swift 新增 post function func addTodoList(completionHandler: ((NSDictionary!, NSError!) -> Void)!, content: String) { var session = NSURLSession.sharedSession() var request = NSMutableURLRequest(URL: self.addTodoUrl!) request.HTTPMethod = "POST" var params = ["content": content] as Dictionary<String, String> var err: NSError? request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err) request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.

Continue reading

Github 參考 log 處理 今天要來談談 log 的處理, 身為一台自走 (?) node.js API server 也應該要記錄一下 request 的 log 呀! 不然哪天出問題了都不知道是哪個 request 把 server 搞掛了! 因此我們就要加入 log 的 middleware node.js 的 log 套件也蠻多的, 例如 winston 不過我們今天要用的是 log4js 會選擇他其實也只是因為之前寫 java 有用過 log4j log4js 的設定感覺起來比較相似 所以就使用它了! 再來我們就安裝一下 log4js 吧 $ npm install log4js -save 並在 app.js 中 require 進去 var log4js = require('log4js'); 接著在 app.js 的前面區段加入以下程式碼: log4js.configure({ appenders: [ { type: 'console' }, //控制台輸出 { type: 'file', //文件輸出 filename: 'logs/access.

Continue reading

Github link (某一天把兩天份的 commit 在一起了忘了開 branch 了…) 接下來就要來寫 api utility 了 我們先開一個 swift 檔案 RestApi.swift import Foundation class RestApi { var API_key = "55665566" var getListUrl = NSURL(string: "http://192.168.1.158:3000/user/kerkerj/todos") } 先做好前置設定,因為 API 有上簡單的小鎖,因此要先寫起來 還有 request 的網址 以下是 get list 的範例: func getTodoList(completionHandler: ((NSArray!, NSError!) -> Void)!) { var session = NSURLSession.sharedSession() var request = NSMutableURLRequest(URL: self.getListUrl!) request.HTTPMethod = "GET" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue(self.API_key, forHTTPHeaderField: "API-Key") let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in if (error !

Continue reading

Github 參考 假設今天我們的 API 上線了,可能就會面臨到一些問題, 例如說,任何人都可以存取我們的 API 當然我們不希望任何人都可以存取, 因此我們必須加一點驗證機制在裡面, 其中一種做法是使用 Oauth token 在拿 API 資料前,先向 Oauth server 要一個 token Oauth Server 認可身份後即會核發一個 token 給 client 端 該 token 具有時效性,6 mins ~ 30 min 不等,看怎麼實作 接著 client 端就拿該組 token 以及 API url 對 resources server 丟 request 其實我們現在在做的 API server 就是一個 resources server 因為我們提供資源 而 resources server 就會先認 token, 確保該 token 的時效性以及正確性,以及該 token 可存取的資源範圍 確認無誤後再回送正確的資料 不過在這邊我們並沒有要實作 Oauth Server 單純以一個 resources server 而言,只要認 token 是否正確

Continue reading

Author's picture

kerkerj

Cat lover <3

Backend Engineer

Taiwan