什么是“api_key”,如何正确使用它?

5
我对restful服务比较新,刚刚实现了测试代码来运行一个带有Swagger插件的ServiceStack restful服务,这就引出了我的问题......
在swagger-ui/index.html中,有一个名为'api_key'的字段。我知道变量名是什么...变量,并且我可以将其设置为任何我喜欢的值,但是我有点困惑它用于什么以及我是否应该使用它。
另外,如果我使用它,ServiceStack如何在服务器端向我呈现该值?
以下是我从文档中得到并成功运行的测试服务:...
    [Api("Hello Web Services")]    
    [Route("/Hello", Summary = @"Noel's ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes")]
    [Route("/Hello/{name}",   Summary = @"N031'5 ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes", Verbs="GET,POST" )] 
    public class Hello
    {
        [ApiMember(Name = "Name", Description = "This is a description", ParameterType = "path", DataType = "string", Verb="GET,POST")]
        public string Name { get; set; }
    }

    public class HelloResponse
    {
        public string Result { get; set; }
    }


    public class HelloService : Service
    {
        public object Any(Hello request)
        {
            return new HelloResponse { Result = "Hello, " + request.Name };
        }
    }

1
虽然与您的问题无关,但请注意您可以让Hello类实现IReturn接口,以使您的服务更加自我记录,并使其更易于使用ServiceStack typed C# clientclass Hello : IReturn<HelloResponse> ... - Mike Mertsock
2个回答

5
回答一下我对Esker的后续请求,以下是如何使用API密钥的方法...
public class HelloService : Service
{        
    public object Any(Hello request)        
    {
        string api_key = this.Request.Headers["api_key"];            
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
} 

但是还需要一些额外的JavaScript代码来将它包含在头部中,就像这样(在swagger-ui/index.html内)...
   $(function () {
        $.ajaxSetup({
            beforeSend: function (jqXHR, settings) {
                jqXHR.setRequestHeader("api_key", $("#input_apiKey").val());
            }
        });
    });

我在这个问题的答案中找到了以下内容:

如何使Swagger将API密钥作为http而不是URL发送


3
Swagger UI有一个通用的概念,即提供一个api_key来使用发送到您的服务的每个请求,在此处记录。它可以作为查询字符串或标头值发送,并且您还可以根据上面的链接中所述更改参数的名称。
只有在您的ServiceStack服务实际需要API密钥时(例如,如果您有一个请求过滤器检查并验证API密钥),才需要配置此项。
之所以需要在JavaScript代码中配置默认的API密钥值来设置Swagger,而不是让用户输入API密钥,是因为一旦加载index.html页面,它将向您的服务发送多个请求以检索元数据,因此它想知道在用户开始交互之前为这些元数据请求发送什么API密钥值。

谢谢@esker,你能否添加一些代码来展示如何典型地访问“api_key”,我将在Any(Hello Request)中使用它。 - Ninjanoel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接