好吧,首先我是个服务器菜鸟。如果我的无知让你不开心,我深表歉意。
我目前已设置了 linode,并安装了 MySQL 和 apache。现在,我正在尝试学习如何使用 REST 从我的 iphone 应用程序与服务器进行通信。
我希望应用程序向服务器发送一组坐标,并让服务器搜索其数据并返回其他附近坐标的列表。我还希望以尽可能少的带宽使用进行通信。
我听说 GET 是一种很好的方法,但我也听说信息(例如坐标)很容易被外部来源读取。安全是一个问题,我希望发送到服务器或从服务器接收的所有信息都是私密的。我应该使用 POST 来实现这一点吗?有没有更好的方法?我可以用 JSON 发送请求吗(以减少带宽使用)?
另外,REST 是否是实现此目的的好方法?我看到的很多教程似乎只是获取或操作数据表,后台并没有太多的服务器逻辑。SOAP 或其他东西更好吗?
我目前对其中的很多内容确实不太清楚,而且我的 google-fu 搜索结果很慢,所以任何信息都将非常有帮助。
答案1
GET 和 POST 在 HTTP 上都不安全,如果安全性很重要,您可能应该考虑获取 SSL 证书,即使是自签名证书也可以 - 只要您告诉您的“客户端”(我猜是某种手机/平板电脑?)信任该证书。
REST 可能是实现此目的的好方法,因为它为您提供了一个很好的简单标准。您目前可能只有一个端点,但如果您构建 REST,则可以随着应用程序的增长轻松添加更多端点。REST 是一种标准,而不是协议。这意味着,REST API 应该符合这些标准;
- 从服务器获取数据应使用 GET。GET 绝不能更改资源。
- 应使用 POST 来更改(创建、更新)服务器上的资源。
- 所有端点/方法都应该有自己的 URL(例如 api.example.com/get_something 而不是 api.example.com/api?method=get_something)
- 响应应根据文件类型返回(因此 get_something.xml 应该返回 xml,get_something.json 应该返回 JSON 等,您不必支持所有格式,但您支持的格式应该可以通过文件类型请求)。
请注意,GET 和 POST 都可以为服务器上的应用程序提供附加参数,但在 GET 的情况下,这通常仅用于过滤查询,而使用 POST 它可以提供有关要记录的更改的详细信息。
关于 JSON 问题,一般来说 JSON 会使用更多的带宽(仅一点点),但使用起来更容易。
例如,这是一个可能的 API 响应的纯文本版本;
-25.90962,161.08639
-4.11525,-91.31969
-13.76025,147.22927
但这里有一个 JSON 响应
{
coordinates:[
{
lat: -25.90962,
long: 161.08639
}
{
lat: -4.11525,
long: -91.31.969
}
{
lat: -13.76025,
long: 147.22927
}
]
}
JSON 具有易于机器读取的特点,而纯文本则必须进行解析。请记住,对于 JSON 等文件类型,您可以使用 GZIP 压缩来大幅减少需要传输的数据。
注意:当你深入了解它时,POST 应该只创建新资源,而 PUT 应该只改变现有资源。