我认为您将永远无法隐藏应用程序调用的URL(如果我运行的是root-ed Android手机,我应该能够监视所有网络流量)
但你真正的问题是你需要以某种方式验证你的api。
一种方法是实现OAUTH,但也许这有点过分了。
如果你想要一个简单的机制,怎么样?
- 创建密钥
- 构建 api 请求(例如。https://my.example.com/users/23?fields=name,email)
- 哈希此请求路径 + 加上您的密钥(例如 md5(url+secret_key) == “a3c2fe167”)
- 将此哈希添加到您的请求中(现在 https://.....?fields=name,email&hash=a3c2fe167)
- 在 api 端,执行相同的转换(删除哈希参数)
- 检查网址的 md5 和密钥
只要秘密仍然是秘密,没有人可以伪造您的请求。
示例(在伪代码中):
安卓端:
SECRET_KEY = "abc123"
def call_api_with_secret(url, params)
# create the hash to sign the request
hash = MD5.hash(SECRET_KEY, url, params)
# call the api with the added hash
call_api(url+"&hash=#{hash}", params)
end
服务器端:
SECRET_KEY = "abc123"
def receive_from_api(url, params)
# retrieve the hash
url_without_hash, received_hash = retrieve_and_remove_hash(url)
# check the hash
expected_hash = MD5.hash(SECRET_KEY, url_without_hash, params)
if (expected_hash != received_hash)
raise our exception!
end
# now do the usual stuff
end