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

Go語言構(gòu)建 RESTful Web 服務(wù)

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

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

App Engine 單元測試

Go 語言實現(xiàn) REST 風格網(wǎng)絡(luò)服務(wù)器

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

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

使用 REST 風格的網(wǎng)絡(luò)服務(wù)器意味著你將基于 HTTP 方法(例如 GET、POST、DELETE等)和URL網(wǎng)址管理你的數(shù)據(jù)。在 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 的函數(shù)。每個對請求的處理函數(shù)都有相同的函數(shù)定義: 它以參數(shù)的形式,獲得輸出響應(yīng)的 http.ResponseWriter 和包含請求細節(jié)的 http.Request。這樣,當我們啟動這個服務(wù),并發(fā)起一個 “DELETE /bar” 請求時,我們將獲得 “Thanks for the DELETE!” 的返回。

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

  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 方法都注冊了處理程序。在這個例子里,我為網(wǎng)絡(luò)應(yīng)用的列表部分注冊了一些函數(shù)。我可以通過 GET 或是 POST 在根路徑( /)獲取和提交列表。如果我在 URL 中設(shè)定了一個鍵(/{key}/),我可以處理一個指定的列表。這樣,我可以通過GET, PUT和DELETE。獲取列表,上傳列表,或是刪除列表。

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

作為處理器(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 不是很熟悉,代碼中的一些細節(jié)或許對你有些模糊,但我基本上獲取了 App Engine datastore 中的所有的列表數(shù)據(jù),并將其轉(zhuǎn)換為 JSON,作為響應(yīng)返回。

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

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

主頁應(yīng)用(Home App)

全局處理器(The Global Handler)

列表處理器(The List Handler)

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

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

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

責任編輯:張偉 來源: oschina
相關(guān)推薦

2023-12-26 00:58:53

Web應(yīng)用Go語言

2009-12-23 09:50:45

JAX-RSJerseyRESTful

2025-02-04 13:53:18

NixGogRPC

2025-03-17 01:55:00

TCP服務(wù)迭代

2012-05-03 11:43:32

ApacheCXFRESTful

2022-03-13 23:51:39

Web項目Go

2012-11-20 10:20:57

Go

2020-06-04 17:38:49

PythonFastAPIWeb服務(wù)

2012-03-20 09:20:40

Go語言

2024-01-02 00:18:56

Buffalo項目Go Web框架

2024-08-02 08:43:44

2024-05-27 00:00:02

govaluateGo語言

2022-09-20 08:43:37

Go編程語言Web

2023-01-16 00:12:20

Go語言Web

2014-10-15 11:01:02

Web應(yīng)用測試應(yīng)用

2025-02-05 12:09:12

2025-04-18 08:37:09

2024-08-05 10:26:42

Go語言架構(gòu)

2017-11-22 13:01:03

Go技術(shù)棧構(gòu)建

2022-04-15 08:25:00

SpringjQuery客戶端
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91偷拍精品一区二区三区 | 国产成人精品一区二区三区视频 | 亚洲成人99 | 欧美精品1区2区3区 免费黄篇 | av黄色免费 | 成人在线精品视频 | 黄色片视频免费 | 欧美精品成人一区二区三区四区 | 精品伊人 | 国产精品久久av | 九九热在线视频观看这里只有精品 | 久久久精品亚洲 | 日韩在线不卡 | 久久高潮| 黑人巨大精品 | 久久精品—区二区三区 | 国产电影一区二区 | 成人免费观看男女羞羞视频 | 亚洲一二三区av | 久久看看 | 男女羞羞视频在线观看 | 91精品国产自产精品男人的天堂 | 亚洲欧美精品在线观看 | 精品国产乱码久久久久久丨区2区 | 亚洲综合一区二区三区 | 天天看天天干 | 在线视频一区二区三区 | 视频一区二区三区中文字幕 | 日韩中文一区二区三区 | 国产欧美一区二区三区日本久久久 | 日韩一区二区三区在线 | 羞羞视频免费在线观看 | 羞羞视频在线观看网站 | 精品国产欧美一区二区 | 日本精品久久久久 | 欧美成人免费在线 | 久久精品亚洲欧美日韩久久 | 国产在线视频网 | 成人在线中文字幕 | 精品免费国产一区二区三区四区介绍 | 国产中文字幕在线 |