如何在Rust程式語言中處理網址的前綴? | MagicLen

文章推薦指數: 80 %
投票人數:10人

在開發Web應用程式的時候,為了要讓應用程式可以被設定在不同網域,或是不同的網址目錄下,通常會需要對應用程式進行「網址前綴」的設定。

MagicLen 內容 如何在Rust程式語言中處理網址的前綴? 2018年11月25日 MagicLen Rust 編輯 本篇文章更新於 2022年5月4日17時 在開發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」,因為它實在不太好看。

為了處理預設連接埠的問題,我們會寫出以下這樣的程式: letmuturl_prefix=String::new(); ifis_https{ url_prefix.push_str("https://"); }else{ url_prefix.push_str("http://"); } url_prefix.push_str(domain); ifis_https&&port!=443||!is_https&&port!=80{ url_prefix.push_str(":"); url_prefix.push_str(&port.to_string()); } ifletSome(path)=path{ if!path.starts_with("/"){ url_prefix.push_str("/"); } url_prefix.push_str("path"); } 以上的程式是讓使用者分別輸入該Web應用程式有沒有透過HTTPS協定來連線(is_https),以及其所在的網域名稱(domain)和路徑(path)來組成「網址前綴」(url_prefix)。

當然,您也可以讓使用者直接輸入完整的「網址前綴」,只是這樣可能就需要再用其它程式去驗證使用者輸入的「網址前綴」是否合法,且通訊協定、網域、連接埠、路徑等等的資訊可能也還要透過解析使用者輸入的「網址前綴」才能得到。

兩種方式的效果都差不多,不過筆者比較偏好前者一開始就把各個資訊拆開設定,再由應用程式來組成「網址前綴」的方式,程式實作起來會比較簡單一點。

URLPrefix 因為每次新開一個Web應用程式專案,幾乎都要撰寫上述提到的「網址前綴」產生程式。

所以筆者開發了「URLPrefix」套件,提供了create_prefix函數來產生「網址前綴」。

Crates.io https://crates.io/crates/url-prefix Cargo.toml url-prefix="*" 使用方法 url_prefix這個crate底下的create_prefix函數還必須搭配其中的Protocol列舉。

用法如下: letprefix=url_prefix::create_prefix(url_prefix::Protocol::HTTPS,"magiclen.org",Some(8100),Some("url-prefix")); assert_eq!("https://magiclen.org:8100/url-prefix",prefix); 當輸入的連接埠並不是通訊協定的預設連接埠時,「網址前綴」中才會明確地包含連接埠。

Rust、url-prefix 關於作者 MagicLen 各位好,我是MagicLen,是這網站的管理員。

我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。

我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。

如果你有興趣認識我,可以加我的Facebook(點我),並且請註明是從MagicLen來的。

載入中…… 隨機文章 用Rust開發Web­Assembly─第六章:康威生命遊戲的效能 2019年9月19日 [烘焙初學者]巧克力布朗尼(Brownie) 2016年2月21日 數獨遊戲 2012年3月20日 TypeScript學習之路─第一章:認識TypeScript 2019年11月12日 誰說紙鶴不能有腳?我偏偏要讓它有四隻腳! 2015年6月8日 免費訂閱本站電子報 交換連結 FuYUan'sSpace Mayday麥帶先生 電腦綠生活PCGreenLife 哈啦客談天說地 程式的奇技淫巧之道 坂本Sakamoto.blog-探究科技未知領域 iZO手札 軟硬e點通 英文練習網 阿摩斯的小確幸 冠均網頁設計公司 低調一點 Spaceack'sBlog 港澳資訊 迴旋人生 申請交換連結 申請交換連結 ×



請為這篇文章評分?