gpt4 book ai didi

rest - 使用REST API在消息 header 中传递参数

转载 作者:行者123 更新时间:2023-12-04 04:00:43 27 4
gpt4 key购买 nike

我正在开发REST API,我需要传输密码以在应用过程(从 key 进行MAC加密)中对每个请求的消息进行身份验证。我正在考虑将它们放在消息头中,以避免在包含已发布/检索到的对象(XML或JSON)的消息正文中添加非数据信息。

这是最佳做法吗?

我可以在标题中添加任意数量的参数吗?我读过我必须给它们加上“x-”前缀。此参数的行为与“路径”或“查询”参数完全相同吗?

我正在使用 Jersey 。

谢谢你的帮助。

最佳答案

  • 是的,我相信具有 header 参数来传输某些数据是可以接受的。 JAX-RS标准甚至定义了@HeaderParam annotation。简单example of @HeaderParam
  • 约定在非标准的HTTP header 前面加上“x-”前缀。

  • 我遇到了与您类似的情况:我需要在每个REST调用中转移用户 token 和应用程序ID。为了避免代码重复,我实现了 PreProcessInterceptor (我正在使用Resteasy),通过它路由所有REST请求。如果用户 token 无效,并且用户没有给定应用程序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;
    }
    }

    关于rest - 使用REST API在消息 header 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892682/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com