【问题标题】:checking if API is alive, should it be Get or Post method? [closed]检查 API 是否存在,应该是 Get 还是 Post 方法? [关闭]
【发布时间】:2018-12-01 01:48:31
【问题描述】:

我对 API 世界有点陌生。在调用任何服务方法之前,我需要检查服务是否在客户端处于活动状态。它可以在客户端通过传递 API URL 并返回请求状态来完成。但由于其他一些原因,我需要在我的 API 中添加一个虚拟方法,它只会返回状态代码。所以从我的客户端,我会打电话给http://example.com/alive 来检查服务状态。

1) 我需要一个 Get 或 Post 方法吗?我不会传递任何参数。 2) 是否可以只返回字符串或更好的是返回类型为 httpresponsemessage 的方法?

 public string GetStatus()
    {
        //validate ip address

        return HttpStatusCode.OK.ToString();
    }

【问题讨论】:

    标签: c# api web-services asp.net-web-api


    【解决方案1】:

    如何使用 HEAD。如果您需要在一定的时间间隔内从客户端发送一些数据以便服务器知道客户端是否处于活动状态,您可以使用 POST 之类的 /heartbeat 或 /sample 等。但如果您只想检查健康状况服务器的状态。您也可以使用 Head。

    根据:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

    HEAD 方法与 GET 相同,只是服务器不能 在响应中返回消息体。包含的元信息 在响应 HEAD 请求的 HTTP 标头中应该是相同的 响应 GET 请求而发送的信息。这种方法可以 用于获取有关实体隐含的元信息 请求而不传输实体主体本身。这种方法是 通常用于测试超文本链接的有效性、可访问性、 以及最近的修改。

    对 HEAD 请求的响应可能是可缓存的,因为 响应中包含的信息可用于更新 以前从该资源缓存的实体。如果新的字段值 表示缓存的实体与当前实体不同(如 将通过 Content-Length、Content-MD5、ETag 或 Last-Modified),那么缓存必须将缓存条目视为陈旧的。

    已编辑 如果您不想返回空结果,也可以使用 GET,然后,在这种情况下,您可以返回当前日期时间。

    [RoutePrefix("ping")]
    public class PingController: ApiController {
    
     [HttpGet]
     [Route("")]
     public IHttpActionResult Get() {
       return Ok(DateTime.UtcNow)
     }
    
    }
    

    【讨论】:

    • 没有数据不会间隔发送
    • 然后你可以使用 HEAD。使用 GET 也没有坏处。如果您不想发送空响应,则可以使用可以是 HttpGet 的 ping 端点并从该操作返回当前 DateTime。
    【解决方案2】:

    1) 我需要一个 Get 或 Post 方法吗?我不会通过任何 参数。

    随意使用其中的任何一个,真的没关系。

    2) 可以只返回字符串还是更好地使用方法 返回类型 httprequestmessage?

    请不要这样做。最好返回 HttpStatus 200 (OK)。

    public IHttpActionResult Ping()
    {
        return Ok();
    }
    

    【讨论】:

    • 对不起,我的意思是httpresponsemessage
    • 我将不得不使用 HttpResponseMessage 而不是 IHttpActionResult 因为客户端 .net 版本。
    • 返回字符串有什么问题?它将简单地返回状态 200,这是所有必需的。
    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-11-23
    相关资源
    最近更新 更多