在開發Web應用程式的時候,為了要讓應用程式可以被設定在不同網域,或是不同的網址目錄下,通常會需要對應用程式進行「網址前綴」的設定。舉例來說,如果要把某個Web應用程式運作在「tool.magiclen.org」這個網域的「url」路徑下,我們可以將「https://tool.magiclen.org/url」這個「網址前綴」設定給該Web應用程式,讓它知道如何去正確處理它所用到的其它資源的路徑。例如它有某個資源的路徑為「images/logo.jpg」,有了「網址前綴」的資料之後,該Web應用程式就知道要連結到「images/logo.jpg」資源的網址是「https://tool.magiclen.org/url/images/logo.jpg」了!



但是由於我們的網址有「通訊協定」(protocol)的存在,且連線也可以透過多個不同的「連接埠」(port),因此在進行「網址前綴」的產生時,並不是直接把通訊協定、網域和路徑串接在一起就好了。舉例來說,HTTPS協定預設使用「443」連接埠,如果我們要使用其它連接埠的話,例如444,則必須要將網址寫成「https://tool.magiclen.org:444/url」;可是如果連接埠就是使用預設的「443」,我們通常不會將網址寫成「https://tool.magiclen.org:443/url」,因為它實在不太好看。

為了處理預設連接埠的問題,我們會寫出以下這樣的程式:

以上的程式是讓使用者分別輸入該Web應用程式有沒有透過HTTPS協定來連線(is_https),以及其所在的網域名稱(domain)和路徑(path)來組成「網址前綴」(url_prefix)。

當然,您也可以讓使用者直接輸入完整的「網址前綴」,只是這樣可能就需要再用其它程式去驗證使用者輸入的「網址前綴」是否合法,且通訊協定、網域、連接埠、路徑等等的資訊可能也還要透過解析使用者輸入的「網址前綴」才能得到。兩種方式的效果都差不多,不過筆者比較偏好前者一開始就把各個資訊拆開設定,再由應用程式來組成「網址前綴」的方式,程式實作起來會比較簡單一點。

URL Prefix

因為每次新開一個Web應用程式專案,幾乎都要撰寫上述提到的「網址前綴」產生程式。所以筆者開發了「URL Prefix」套件,提供了「create_prefix」函數來產生「網址前綴」。

Crates.io

https://crates.io/crates/url-prefix

Cargo.toml

url-prefix = "*"

使用方法

「url_prefix」這個crate底下的「create_prefix」函數還必須搭配其中的「Protocol」列舉。

用法如下:

當輸入的連接埠並不是通訊協定的預設連接埠時,「網址前綴」中才會明確地包含連接埠。

Validators 支援

Validators」也是筆者開發的套件,可以用來驗證使用者的輸入資料。「URL Prefix」套件也支援與「Validators」套件一同使用,只要開啟「validator」特色即可。「Cargo.toml」設定檔的寫法如下:

開啟「validator」特色之後,「url_prefix」這個crate底下就會多出「create_prefix_with_validated_domain」、「create_prefix_with_validated_ipv4」、「create_prefix_with_validated_ipv6」和「create_prefix_with_validated_host」函數。

用法如下: