国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過demo學習OpenStack開發所需的基礎知識 -- API服務(1)

Jason_Geng / 3172人閱讀

摘要:通過,也就是通過各個項目提供的來使用各個服務的功能。通過使用的方式是由各個服務自己實現的,比如負責計算的項目實現了計算相關的,負責認證的項目實現了認證和授權相關的。的服務都是使用的方式來部署的。

使用OpenStack服務的方式

OpenStack項目作為一個IaaS平臺,提供了三種使用方式:

通過Web界面,也就是通過Dashboard(面板)來使用平臺上的功能。

通過命令行,也就是通過keystone, nova, neutron等命令,或者通過最新的openstack命令來使用各個服務的功能(社區目前的發展目標是使用一個單一的openstack命令替代過去的每個項目一個命令的方式,以后會只存在一個openstack命令)。

通過API,也就是通過各個OpenStack項目提供的API來使用各個服務的功能。

上面提到的三種方式中,通過API這種方式是基礎,是其他兩種方式可行的基礎。

通過Web界面使用OpenStack服務這種方式是通過OpenStack的Horizon項目提供的。Horizon項目是一個Django應用,實現了一個面板功能,包含了前后端的代碼(除了Python,還包括了CSS和JS)。Horizon項目主要是提供一種交互界面,它會通過API來和各個OpenStack服務進行交互,然后在Web界面上展示各個服務的狀態;它也會接收用戶的操作,然后調用各個服務的API來完成用戶對各個服務的使用。

通過命令行是用OpenStack服務的方式是由一系列項目來提供的,這些項目一般都命名為python-projectclient,比如python-keystoneclient,python-novaclietn等。這些命令行項目分別對應到各個主要的服務,為用戶提供命令行操作界面和Python的SDK。比如python-keystoneclient對應到keystone,為用戶提供了keystone這個命令,同時也提供了keyston項目的SDK(其實是在SDK的基礎上實現了命令行)。這些client項目提供的SDK其實也是封裝了對各自服務的API的調用。由于每個主要項目都有一個自己的命令行工具,社區覺得不好,于是又有了一個新的項目python-openstackclient,用來提供一個統一的命令行工具openstack(命令的名字就叫做openstack),這個工具實現了命令行,然后使用各個服務的client項目提供的SDK來完成對應的操作。

通過API使用OpenStack的方式是由各個服務自己實現的,比如負責計算的nova項目實現了計算相關的API,負責認證的keystone項目實現了認證和授權相關的API。這些API都是有統一的形式的,都是采用了HTTP協議實現的符合REST規范的API。OpenStack中如何實現這些API就是本文重點要將的內容。

基于HTTP協議的RESTful API

REST的全稱是Representational State Transfer,中文翻譯過來是表征狀態轉移,是Roy Fielding在他的博士論文**Architectural Styles and the Design of Network-based Software Architectures**提出的一種軟件架構風格??梢韵鹊絯ikipedia頁面了解一下這個風格的特點。一般會把滿足這種設計風格的API成為RESTful API。由于這種軟件設計風格非常適合采用HTTP協議來實現,因此HTTP協議是目前實現RESTful API的主要方案。

OpenStack就是基于HTTP協議和JSON來實現自己的RESTful API(之前OpenStack還有采用XML來表示數據的,現在都已經轉到JSON了)。當一個服務要提供API時,它就會啟動一個HTTP服務端,用來對外提供RESTful API。

OpenStack的API都是有詳細的文檔記錄的,可以在http://docs.openstack.org/看到所有的API的文檔。每個API的文檔形式如下:

當然,你可以點開detail看到詳細的說明。從上面這個API的文檔來看,你會覺得這個和開發網站時使用的GET方法和POST方法差不多,實際上也是差不多的,只不過對HTTP協議的使用方法做了滿足REST風格的規定而已。

Python如何實現RESTful API

因為Python能夠進行Web開發,所以用來開發RESTful API也就不成問題,這兩者的技術基礎是一樣。在Python下開發RESTful API應用,無非是解決兩個問題:

服務如何部署?

用什么框架開發?

服務如何部署?

說到Python的Web服務部署這個問題,就不得不提到WSGI。目前Python有兩種方式來開發和部署一個Web應用:用WSGI不用WSGI。如果你不了解WSGI,那么你需要先看下另外這篇關于WSGI的文章:WSGI簡介。

OpenStack的API服務都是使用WSGI的方式來部署的。在生產環境中部署WSGI,一般會考慮使用Web服務器 + 應用服務器 + 應用(框架)的方案。OpenStack官方推薦的是使用Apache + mod_wsgi的方案,不過這個要換成其他方案也很容易,你也可以選nginx + uWSGI。對于開發調試的目的,有些項目也會提供使用eventlet的單進程部署方案,比如Keystone項目的keystone-all命令。采用eventlet這種異步架構來進行應用開發也是一個比較大的話題,本文不覆蓋這方面的內容。

當然,也可以不用WSGI。在Python中,如果不使用WSGI的化,一般開發者會選擇一些專門的服務器和框架,比如Tornado,或者最新最潮的aiohttp。不過在OpenStack的項目中我還沒見過不使用WSGI的。

用什么框架開發

Python的Web開發框架很多,最出名自然是Django了。基本上,還活躍的框架都支持RESTful API的開發,有些框架還專門為RESTful API的開發提供了便利的功能(比如Pecan),有些框架則通過第三方模塊來提供這種便利,比如Django和Flask都有不少和REST相關的第三方庫。

對于框架選擇,也沒有什么特別好的標準,一般都是比較性能、文檔、社區是否活躍等。在我看來,選擇流行的一般就不會錯。

OpenStack中的RESTful API開發

上面已經談到了OpenStack都是使用WSGI,也提到了部署方式。這一章來說一下OpenStack中使用的框架。

OpenStack項目傾向于不重新發明輪子,一般都會選擇現有的庫和框架來使用,除非現有的框架不滿足需求。因為Web框架的選擇很多,而且都滿足需求,所以OpenStack項目到目前為止都是使用現成的Web框架。

OpenStack早期的項目并沒有使用一個框架,而是使用了幾個不同的模塊來組合出一個框架:Paste + PasteDeploy + Routes + WebOb,這幾個不同的模塊分別負責應用的WSGI化、URL路由和請求處理等功能。Nova, Glance, Neutron, Keystone等早期的項目都是使用這樣的架構來實現RESTful API的。

早期的這種技術選型帶來的好處是"框架"具備足夠的靈活性,缺點則是要把這幾個模塊組合起來實現一個REST服務,需要寫很多代碼,連WSGI的入口函數都要自己實現(比如Keystone項目的keystone/common/wsgi.py文件中的class Application)。因為靈活性的好處不是很明顯,而代碼量大的壞處很明顯,比如上面那個class Application需要在每個項目中復制一遍,所以社區的新項目就開始使用新的Web框架Pecan。

Pecan是一個基于對象路由的框架,即靈活又簡單。Pecan主要實現了URL路由功能,支持RESTful API。Pecan沒有實現模板、session管理和ORM等功能,但是這些功能可以通過其他的模塊來實現。對于OpenStack來說,Pecan是一個很好的選擇,因為OpenStack項目中統一使用sqlalchemy來實現ORM,API的實現也不需要模板功能,安全控制則基于Keystone體系。使用Pecan來開發REST服務,代碼量很少,代碼結構也清晰。Ceilometer項目就是使用了Pecan。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37598.html

相關文章

  • 通過demo學習OpenStack開發需的基礎知識 -- 數據庫(2)

    摘要:在實際項目中,這么做肯定是不行的實際項目中不會使用內存數據庫,這種數據庫一般只是在單元測試中使用。接下來,我們將會了解中單元測試的相關知識。 在上一篇文章,我們介紹了SQLAlchemy的基本概念,也介紹了基本的使用流程。本文我們結合webdemo這個項目來介紹如何在項目中使用SQLAlchemy。另外,我們還會介紹數據庫版本管理的概念和實踐,這也是OpenStack每個項目都需要做的...

    mingzhong 評論0 收藏0
  • 通過demo學習OpenStack開發需的基礎知識 -- API服務(4)

    摘要:到這里,我們的服務的框架已經搭建完成,并且測試服務器也跑起來了。上面的代碼也就可以修改為再次運行我們的測試服務器,就可以返現返回值為格式了。我們先來完成利用來檢查返回值的代碼方法的第一個參數表示返回值的類型這樣就完成了的返回值檢查了。 上一篇文章說到,我們將以實例的形式來繼續講述這個API服務的開發知識,這里會使用Pecan和WSME兩個庫。 設計REST API 要開發REST AP...

    meislzhua 評論0 收藏0
  • 通過demo學習OpenStack開發需的基礎知識 -- 單元測試

    摘要:本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述和中的單元測試的生態環境。另外,在中指定要運行的單元測試用例的完整語法是。中使用模塊管理單元測試用例。每個項目的單元測試代碼結構可 本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述Python和OpenStack中的單元測試的生態環境。 單元測試的重要性 github上有個人畫了一些不同語言的學...

    douzifly 評論0 收藏0
  • 通過demo學習OpenStack開發需的基礎知識 -- API服務(3)

    摘要:從上面的例子可以看出,決定響應類型的主要是傳遞給函數的參數,我們看下函數的完整聲明參數用來指定返回值的模板,如果是就會返回內容,這里可以指定一個文件,或者指定一個模板。用來做什么上面兩節已經說明了可以比較好的處理請求中的參數以及控制返回值。 上一篇文章我們了解了一個巨啰嗦的框架:Paste + PasteDeploy + Routes + WebOb。后來OpenStack社區的人受不...

    ybak 評論0 收藏0
  • 通過demo學習OpenStack開發需的基礎知識 -- 軟件包管理

    摘要:不幸的是,在軟件包管理十分混亂,至少歷史上十分混亂。的最大改進是將函數的參數單獨放到一個的文件中這些成為包的元數據。基于的版本號管理。的版本推導這里重點說明一下基于的版本號管理這個功能。開發版本號的形式如下。 為什么寫這個系列 OpenStack是目前我所知的最大最復雜的基于Python項目。整個OpenStack項目包含了數十個主要的子項目,每個子項目所用到的庫也不盡相同。因此,對于...

    blastz 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<