我正在開發一個REST API,並且需要在應用程序進程(從祕密密鑰進行MAC加密)中傳輸密碼以驗證消息的每個請求。我正在考慮將它們放在消息頭中,以避免在包含發佈/檢索對象(XML或JSON)的消息體中添加非數據信息。使用REST API在消息頭中傳遞參數
這是最佳做法嗎?
我可以在標題中添加所需的參數嗎?我讀過,我必須用「x-」作爲前綴。此參數的行爲與Path或Query參數完全相同?
我正在使用澤西島。
謝謝你的幫助。
我正在開發一個REST API,並且需要在應用程序進程(從祕密密鑰進行MAC加密)中傳輸密碼以驗證消息的每個請求。我正在考慮將它們放在消息頭中,以避免在包含發佈/檢索對象(XML或JSON)的消息體中添加非數據信息。使用REST API在消息頭中傳遞參數
這是最佳做法嗎?
我可以在標題中添加所需的參數嗎?我讀過,我必須用「x-」作爲前綴。此參數的行爲與Path或Query參數完全相同?
我正在使用澤西島。
謝謝你的幫助。
是的我相信有標題參數傳輸某些數據是可以接受的。 JAX-RS標準甚至定義了@HeaderParam annotation。簡單的example of @HeaderParam。
這是一個將非標準http標頭用「x-」前綴的約定。
我和你有類似的情況:我需要在每個REST調用中傳輸用戶令牌和應用程序ID。爲了避免代碼重複,我實現了PreProcessInterceptor
(我使用Resteasy),通過它來路由所有REST請求。如果用戶令牌無效並且用戶沒有給予應用程序ID的權限,那麼我將返回401未授權。我的代碼看起來與此類似(簡體版):
@Provider
@ServerInterceptor
public class RestSecurityInterceptor implements PreProcessInterceptor {
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
throws UnauthorizedException {
String token = request.getHttpHeaders().getRequestHeader("token").get(0);
// user not logged-in?
if (checkLoggedIn(token)) {
ServerResponse response = new ServerResponse();
response.setStatus(HttpResponseCodes.SC_UNAUTHORIZED);
MultivaluedMap<String, Object> headers = new Headers<Object>();
headers.add("Content-Type", "text/plain");
response.setMetadata(headers);
response.setEntity("Error 401 Unauthorized: "
+ request.getPreprocessedPath());
return response;
}
return null;
}
}
謝謝。 Interceptor解決方案非常優雅,但我的身份驗證過程並未在我的所有應用程序中推廣。 – Zofren 2011-02-21 07:18:14
Additonnal問題:是它更好地使用現有的頭參數(日期,授權)或創建特定的人(X-APP-日,X-APP-AUTH )? – Zofren 2010-10-11 13:20:57