REST(Representational State Transfer)是一種架構風格,允許程序與Web應用程序進行通信并訪問這些應用程序提供的功能。REST API通?;?a href="http://www.dlbhg.com/blog/rest-api-dam">HTTP協議,使用標準的HTTP方法(如GET、POST、PUT、DELETE)來操作資源。
JSON Web令牌(JWT)是一種緊湊且URL安全的方式,用于在雙方之間傳遞聲明。JWT可以進行數字簽名、加密或兩者兼備,從而確保數據的完整性和安全性。JWT在REST API的身份驗證中非常常見,能夠有效減少密碼傳輸的風險。
InterSystems IRIS提供了一種便捷的方法來生成REST API的代碼存根。通過使用OpenAPI 2.0規范,您可以快速生成API的基礎代碼結構。生成的代碼通常包括以下三個文件:
impl.cls:主要實現API的業務邏輯。disp.cls:處理API請求的調度邏輯。spec.cls:定義API的規范。在實際開發中,我們大部分時間會集中在impl.cls文件中。
在數據庫中,我們需要定義一個基礎對象模型。例如,創建一個“角色”(Character)對象,該對象包含以下屬性:
以下是對象模型的示例代碼:
Class TTRPG.Character Extends %Persistent {
Property Name As %String [Required];
Property Race As %String;
Property Class As %String;
Property Level As %String;
Index NameIndex On Name [IdKey]; ClassMethod GetCharByName(Name As %String) As TTRPG.Character {
Set Character = ##Class(TTRPG.Character).%OpenId(Name)
Quit Character
}
}
通過繼承%Persistent類,我們可以將“角色”對象存儲到數據庫中。IdKey屬性確保角色名稱的唯一性。
以下是創建角色的PostCharacter方法實現:
ClassMethod PostCharacter(Name As %String, Class As %String, Race As %String, Level As %String) As %DynamicObject {
Set results = {}
Set char = ##Class(TTRPG.Character).%New()
Set char.Name = Name
Set char.Class = Class
Set char.Race = Race
Set char.Level = Level
Set st = char.%Save()
If st {
Set charInfo = {}
Set charInfo.Name = char.Name
Set charInfo.Class = char.Class
Set charInfo.Race = char.Race
Set charInfo.Level = char.Level
Set results.Character = charInfo
Set results.Status = "Success"
} Else {
Set results.Status = "Error"
Set results.Message = "無法創建角色"
}
Quit results
}
此方法接收角色的屬性作為參數,創建一個新的角色對象并保存到數據庫中。如果保存成功,將返回角色信息;否則返回錯誤消息。
以下是按名稱檢索角色的GetCharacterByName方法實現:
ClassMethod GetCharacterByName(charName As %String) As %DynamicObject {
Set results = {}
Set char = ##Class(TTRPG.Character).GetCharByName(charName)
If char {
Set charInfo = {}
Set charInfo.Name = char.Name
Set charInfo.Class = char.Class
Set charInfo.Race = char.Race
Set charInfo.Level = char.Level
Set results.Character = charInfo
Set results.Status = "Success"
} Else {
Set results.Status = "Error"
Set results.Message = "未找到角色"
}
Quit results
}
此方法根據角色名稱檢索數據庫中的角色對象,并返回相應的信息。如果角色不存在,則返回錯誤消息。
以下是獲取所有角色列表的GetCharacterList方法實現:
ClassMethod GetCharacterList() As %DynamicObject {
Set results = {}
Set query = "SELECT Name, Class, Race, Level FROM TTRPG.Character"
Set tStatement = ##Class(%SQL.Statement).%New()
Set qstatus = tStatement.%Prepare(query)
If qstatus '= 1 {
Do ##Class(TTRPG.impl).%WriteResponse("錯誤:" _ $SYSTEM.Status.DisplayError(qstatus))
}
Set rset = tStatement.%Execute()
Set characterList = []
While rset.%Next() {
Set charInfo = {}
Set charInfo.Name = rset.Name
Set charInfo.Class = rset.Class
Set charInfo.Race = rset.Race
Set charInfo.Level = rset.Level
Do characterList.%Push(charInfo)
}
Set results.Status = "Success"
Set results.TotalCount = rset.%ROWCOUNT
Set results.CharacterList = characterList
Quit results
}
此方法通過SQL查詢獲取所有角色信息,并返回包含角色列表的動態對象。
/api/TTRPG/。InterSystems。通過/login端點進行登錄,發送以下JSON結構的請求:
{
"user": "{YOURUSER}",
"password": "{YOURPASSWORD}"
}
成功登錄后,將收到一個JWT令牌(access_token),可用于后續請求。
使用/characters端點發送POST請求,創建角色。請求頭需包含以下格式的授權信息:
Authorization: Bearer {JWTValue}
使用/characters端點發送GET請求,獲取所有角色列表。
使用/characters/{charName}端點發送GET請求,按名稱檢索角色信息。
通過本文,您學習了如何使用InterSystems IRIS創建一個REST API,并通過JWT對其進行保護。該方法不僅提升了API的安全性,還簡化了身份驗證的實現流程。希望本文對您有所幫助!
原文鏈接: https://community.intersystems.com/post/creating-rest-api-jwt-authentication-objectscript