因此,我需要设计一个RESTful查询API,它基于一些过滤器返回一组对象.通常的HTTP方法是GET.唯一的问题是,它可以拥有至少十几个过滤器,如果我们将所有这些过滤器作为查询参数传递,则URL可能会变得很长(足够长以被某些防火墙阻止).
减少参数数量不是一种选择.
我能想到的另一种选择是在URI上使用POST方法并将过滤器作为POST主体的一部分发送.这是不是RESTfull(对查询数据进行POST调用).
有没有更好的设计建议?
谢谢
我读了这个问题,但它没有回答我的问题.
对我来说,标题和参数都是字典,区别在于标题是[String : String]
参数是什么[String : AnyObject]?
,所以如果您的参数也是字符串,那么您可以在标题内发送它们(同时使用'x-'前缀表示它们不是标准标题)这是一种常见但不好的做法.
headers
和之间还有其他区别parameters
吗?parameters
?Alamofire Request
方法
public func request(
method: Method,
_ URLString: URLStringConvertible,
parameters: [String: AnyObject]? = nil,
encoding: ParameterEncoding = .URL,
headers: [String: String]? = nil)
-> Request
{
return Manager.sharedInstance.request(
method,
URLString,
parameters: parameters,
encoding: encoding,
headers: headers
)
}
Run Code Online (Sandbox Code Playgroud)
作为一个例子,我看到人们["x-ios-version" : UIDevice.currentDevice().systemVersion]
通过标题传递或构建版本
我熟悉在 URL 路径中使用连字符分隔单词的约定。参数名称如何,例如在 a 中<form>
:
<form>
<input name="my_special_field">
</form>
Run Code Online (Sandbox Code Playgroud)
那更好还是my-special-field
?我见过谷歌在分析中使用下划线utm_campaign
和其他参数名称。下划线读起来会好一些,并且允许在名称 ( field_for_5-16-17
) 中偶尔使用连字符。但是连字符肯定是 URL 路径的约定。
在 HTTP 参数名称中分隔单词的约定是什么?
有没有办法使用 HttpParams 和 fromObject 有条件地添加参数?我尝试在实例化 HttpParams 后添加条件参数,但这不起作用:
const params = new HttpParams({
fromObject : {
requiredParam: 'requiredParam'
}
});
if (addOptionalParam)
params.append('optionalParamKey', 'optionalParamValue');
Run Code Online (Sandbox Code Playgroud)
另外,我可以使用常量变量作为 fromObject 参数的键吗?我试过这个,但它不起作用:
const ConstantVariableForKeyName = 'key';
const params = new HttpParams({
fromObject : {
{{ConstantVariableForKeyName}}: 'paramValue'
}
});
Run Code Online (Sandbox Code Playgroud) 我有Thins非常简单的功能:
createParams(paramsArray, withToken: boolean): HttpParams {
let params = new HttpParams();
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
params.set('access_token', JSON.stringify(currentUser.token));
return params;
}
Run Code Online (Sandbox Code Playgroud)
当我调试此params变量不包含任何键或值:
我究竟做错了什么?
angular ×2
http ×2
angular6 ×1
api ×1
forms ×1
http-headers ×1
httprequest ×1
rest ×1
swift ×1
web ×1