我在谷歌端点框架(Java(上做了udacity course ud859。为了访问云数据存储中的数据,我使用了Objectify。实体类按以下方式定义
@Entity
public class Profile{
@Id
Long id;
}
此"id"属性用于唯一标识每个配置文件,并使用ObjectifyFactory实例以随机方式分配。
因此,要访问配置文件数据,可以形成一个端点"/profile/{id}">
此外,此 id 还可用于使用 Key.create(Profile.class,id);
此方法返回类型 Key<Profile>
的实例。它的方法之一key.getString()
返回表示该配置文件对象的网页安全字符串。
所教授的约定是使用Websafestring通过Web访问和共享对象的数据。
我想了解网络安全字符串如何通过网络安全,以及使用通常使用的 URL 类型"/profile/{id}"的缺点是什么
网页安全字符串对查找实体所需的Key
的整个祖先进行编码。一个简单的用例可以将 ID 定义为 Key(MyKind, 1234L)
。 现在,如果您的实体定义了MyParentKind
父级,那么它的 full 键可能更像是 Key(MyKind, 1234L, MyParentKind, 5678L)
。祖先案例中的查找既需要实体的 ID 也需要所有祖先的种类 + ID 对。网页安全密钥将所有此类信息编码为单个字符串。
参考: https://cloud.google.com/appengine/docs/standard/java/datastore/creating-entity-keys#Java_Ancestor_paths
我想这里考虑了安全性,但实际上没有太大区别,因为在这种情况下,Websafe 密钥字符串是 base64 编码的,但未混淆,因此很容易获得数字 id。如果要对用户隐藏数据库 ID,则还需要加密密钥。