使用REST API响应错误用户输入的建议方法是什么?

时间:2016-12-25 05:07:38

标签: c# json rest xamarin

让我们假设以下内容:

  • 我有一个休息API,它会返回水果的名字,而且只有5个水果。
  • 要获得水果名称,我必须要求提供身份证明。

请考虑以下代码:

public class Fruit {
    public int FruitID { get; set; }
    public string FruitName { get; set; }
    public Fruit(string json){
        JObject o = JObject.Parse(json);
        FruitID = Int32.Parse((string) o["id"]);
        FruitName = (string) o["name");
    }
}

public static Fruit getFruit(int id){
    Task<Fruit> task = "http://fruit.com/get_fruit"
        .SetQueryParams(new { fruit_id = id })
        .GetStringAsync();
    return new Fruit(task.Result);
}

(如果此时出现任何问题,请纠正我,我是C#Tasks的新手)

让我们说当该任务返回时,如果json收到有效的ID,json可能如下所示......

{
    "status":1,
    "id": 3,
    "name": "apple"
}

如果收到无效ID,则为此。

{
    "status":0
}

如果用户应该输入搜索到的ID,则他们有可能输入不存在的ID,因为只有5,(0到4)。根据我在上面输入的代码,如果返回"status":0,我可以看到应用程序崩溃,因为它没有类构造函数正在查找的两个字段。

我的问题是:处理可能无效输入的最佳方法是什么(例如用户输入ID为20)?

2 个答案:

答案 0 :(得分:2)

RESTful API的推荐方法是使用HTTP错误代码,在您的情况下,它将是404(未找到),因为请求的水果不存在。 在尝试创建对象之前,您应该处理错误代码。因此,检查请求是否已成功执行(200 OK),然后处理有效负载。

以下是状态代码的参考: http://www.restapitutorial.com/httpstatuscodes.html

答案 1 :(得分:0)

输入验证是Web服务开发中的重要任务之一。我个人有两个阶段。首先,我检查对象的空值。我写这个方法是为了做到这一点:

private bool HasNull(object webServiceInput, string[] optionalParameters = null)
{

    if (ReferenceEquals(null, webServiceInput))
        return false;

    if (optionalParameters == null)
        optionalParameters = new string[0];

    var binding = BindingFlags.Instance | BindingFlags.Public;
    var properties = webServiceInput.GetType().GetProperties(binding);
    foreach (var property in properties)
    {
        if (!property.CanRead)
            continue;

        if (property.PropertyType.IsValueType)
            continue;

        if (optionalParameters.Contains(property.Name))
            continue;

        var value = property.GetValue(webServiceInput);
        if (ReferenceEquals(null, value))
            return false;
    }

    return true;
}

然后,如果某些输入应该具有指定的验证,我将单独检查它。例如,我检查ID在0到5之间; 我希望它可以帮助你。