成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語言構建 RESTful Web 服務

開發 開發工具
在開始著手開發網絡應用之前,你需要先選擇你所用的工具集,以及它們之間的相互作用,這一步很重要。在我的項目中,我選擇 Go 語言作為后臺,AngularJS 作為前臺

本文是 Hardcore Google 系列的一部分,本系列的其它部分于下面地址可以找到:

App Engine 單元測試

Go 語言實現 REST 風格網絡服務器

在開始著手開發網絡應用之前,你需要先選擇你所用的工具集,以及它們之間的相互作用,這一步很重要。在我的項目中,我選擇 Go 語言作為后臺,AngularJS 作為前臺,而 Google App Engine 則為主機。于是,剩下的問題就是,Go 語言如何同 AngularJS 交互。幸運的是,這真的太簡單了。

我選擇以 REST風格的 API 進行交互,因為這樣交互的方法組織良好,且網絡應用的前端后端對其都支持良好。在我的開發生涯中,我發現,我為了將兩種格格不如的東西統合到一起浪費了太多頭腦,頭發都掉了不少,REST 很好。

使用 REST 風格的網絡服務器意味著你將基于 HTTP 方法(例如 GET、POST、DELETE等)和URL網址管理你的數據。在 Go 語言的一端,你可以使用 net/http 包來處理 AngularJS 提交的請求。而在更高一級,你可以這樣告訴 Go 語言如何處理請求:

  1. http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {  
  2.     fmt.Fprintf(w, "Thanks for the %s!", r.Method)  
  3. }) 

上面我們注冊了一個處理所有請求 /bar 的函數。每個對請求的處理函數都有相同的函數定義: 它以參數的形式,獲得輸出響應的 http.ResponseWriter 和包含請求細節的 http.Request。這樣,當我們啟動這個服務,并發起一個 “DELETE /bar” 請求時,我們將獲得 “Thanks for the DELETE!” 的返回。

我希望,你可以看看下一步的處理。在 Go 語言中實現 REST 風格的 API,你需要為每個 URL 網址節點注冊處理函數,并根據給出的方法實現處理程序。通過使用 gorilla/mux 包,這個過程將更簡單。它比 Go 語言默認的 HTTP 處理器更底層,但它能夠更好的通過 HTTP 方法處理路由細節。下面就是例子:

  1. :mux.NewRouter()  
  2.  
  3. // Get all lists.  
  4. m.HandleFunc("/", GetAllLists).Methods("GET")  
  5.  
  6. // Make a new list.  
  7. m.HandleFunc("/", PostList).Methods("POST")  
  8.  
  9. // Singe list operations.  
  10. m.HandleFunc("/{key}/", GetList).Methods("GET")  
  11. m.HandleFunc("/{key}/", PutList).Methods("PUT")  
  12. m.HandleFunc("/{key}/", DeleteList).Methods("DELETE")  
  13.  
  14. // Everything else fails.  
  15. m.HandleFunc("/{path:.*}", gorca.NotFoundFunc) 

如你所見,我為每個需要的 REST 方法都注冊了處理程序。在這個例子里,我為網絡應用的列表部分注冊了一些函數。我可以通過 GET 或是 POST 在根路徑( /)獲取和提交列表。如果我在 URL 中設定了一個鍵(/{key}/),我可以處理一個指定的列表。這樣,我可以通過GET, PUT和DELETE。獲取列表,上傳列表,或是刪除列表。

***的 HandleFunc 則用來處理其它未設定的請求。如果客戶端的請求并未明確列出,我們將返回一個404狀態和 JSON 格式的細節信息。net/http 包可以返回了一個簡單的404狀態,但我希望同時能返回 JSON響應。 使用全部抓取將允許我返回 JSON響應。客戶端則可以為用戶顯示一個有效的信息,提示錯誤所在,而不僅僅是一個簡單的“請求失敗”。

作為處理器(handler)的例子, GetAllLists 處理器代碼如下:

  1. // GetAllLists fetches all of the lists.  
  2. func GetAllLists(w http.ResponseWriter, r *http.Request) {  
  3.     // Create the query.  
  4.     c :appengine.NewContext(r)  
  5.     q :datastore.NewQuery("List").Order("-LastModified")  
  6.  
  7.     // Fetch the lists.   
  8.     lists := []List{}  
  9.     if _, err :q.GetAll(c, &lists); err != nil {  
  10.         gorca.LogAndUnexpected(c, w, r, err)  
  11.         return  
  12.     }  
  13.  
  14.     // Write the lists as JSON.  
  15.     gorca.WriteJSON(c, w, r, lists)  

如果你對 App Engine 不是很熟悉,代碼中的一些細節或許對你有些模糊,但我基本上獲取了 App Engine datastore 中的所有的列表數據,并將其轉換為 JSON,作為響應返回。

GetAllLists 函數顯示了 Go 如何同 App Engine 相結合,使開發變得簡單。短短的十幾行代碼,我可以創造一個強大的 REST 網絡服務器。我不必處理 MySQL 的連接、用戶認證、或解析傳入的 HTTP 請求。 App Engine 和 Go 已經為我做了處理。最終的結果就是,我擁有了更具可讀性、可測試性和可維護性的代碼。

你可以在我的代碼中看到我是如何為此而著迷的:

主頁應用(Home App)

全局處理器(The Global Handler)

列表處理器(The List Handler)

列表處理器函數(The List Handler Functions)

我真的驚訝于如此簡易的過程。安裝后臺環境很可能成為一個夢魘。在工作中,我曾處理過一個 SOAP 網絡服務,我愿出庭作證:這個'S'(簡易的)是一個謊言。而對 Go,這根本不是什么事兒。它已經提供了強大的功能,且開源則意味著,只要你需要,大批如同 gorilla/mux 的包有的是。下一次,我將說說如何利用 Angular JS 處理我們發回的JSON。敬請期待。

原文鏈接:http://www.oschina.net/translate/hardcore-google-communicating-go

責任編輯:張偉 來源: oschina
相關推薦

2023-12-26 00:58:53

Web應用Go語言

2009-12-23 09:50:45

JAX-RSJerseyRESTful

2025-02-04 13:53:18

NixGogRPC

2025-03-17 01:55:00

TCP服務迭代

2012-05-03 11:43:32

ApacheCXFRESTful

2022-03-13 23:51:39

Web項目Go

2012-11-20 10:20:57

Go

2012-03-20 09:20:40

Go語言

2020-06-04 17:38:49

PythonFastAPIWeb服務

2024-08-02 08:43:44

2024-05-27 00:00:02

govaluateGo語言

2022-09-20 08:43:37

Go編程語言Web

2024-01-02 00:18:56

Buffalo項目Go Web框架

2023-01-16 00:12:20

Go語言Web

2022-04-15 08:25:00

SpringjQuery客戶端

2025-02-05 12:09:12

2025-04-18 08:37:09

2024-08-05 10:26:42

Go語言架構

2014-10-15 11:01:02

Web應用測試應用

2017-11-22 13:01:03

Go技術棧構建
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九热在线 | 91麻豆精品国产91久久久久久 | 亚洲综合色| 黄色欧美 | 999国产精品视频免费 | 亚洲欧美国产毛片在线 | 亚洲成人自拍 | 欧美性极品xxxx做受 | 久久久久久亚洲精品 | 欧美亚洲另类丝袜综合网动图 | 国产精品久久久久久久久久了 | av在线成人 | 一区二区精品视频 | av网站在线播放 | 国产精品99久久久久久大便 | 欧美一级二级三级视频 | 国产精品一区二区福利视频 | 久久机热| 成人国产免费视频 | 午夜成人免费视频 | 免费看a| 高清av电影 | 熟女毛片 | 人人干人人干人人 | 天天干天天干 | 视频二区国产 | 成人福利电影 | 精品久久久久久 | 色爽女| 韩国成人在线视频 | 丁香婷婷综合激情五月色 | 久久欧美高清二区三区 | 国产1区在线 | 97色在线观看免费视频 | 午夜理伦三级理论三级在线观看 | 久久精品一区二区视频 | 国产高清在线视频 | 欧美久久久网站 | 三级在线视频 | 激情五月综合 | 久久久久久精 |