Gan*_*cus 2 google-app-engine android json
我使用数据存储区创建了一个非常简单的GAE和云端点API.我创建了一个名为Book的实体,其中包含一些属性(大多数是字符串)并部署了应用程序.
我的GET和POST请求正常工作,但是我不明白为什么每次我执行GET请求来检索数据存储区中的实体时,JSON中都有一个额外的行,例如:
{
        "id": "5634482569460976",
        "date": "20141125",
        "author": "Charly",
        "kind": "bookendpoint#resourcesItem"
    }
我从未在我的实体中设置"亲切"属性,它来自哪里?除了在每个json响应结束时,我可以找到以下两行:
"kind": "bookendpoint#resources",
"etag": "\"dIDB-NLukmBT86-tBYjgZpbt2_Y/FcVIa289PJU7Cjr-bG8b0oxmfrKQ\""
我不知道那些"善良"和"etag"来自哪里.
你能告诉我它们是什么以及如何防止它们出现在JSON响应中吗?
Cloud Endpoints会自动添加这两个属性.我不知道如何删除它,Google似乎没有记录为什么添加它们,但有些很容易猜到.
这个kind领域
kind向Android客户端指示如何序列化(从JSON文本转换为Java对象)数据.当多态性发挥作用时,这很有用.例如,假设您将从端点返回此类:
public class Library {
  public List<Item> items;
}
public interface Item{
  private String title;
}
public class Book extends Item {
}
public class Magazine extends Item {
}
然后假设您的Android客户端收到此JSON数据:
{
  "items": [
           {"title":"My book"},
           {"title":"My magazine"},
      ]
}
那么客户如何知道哪个项目是Book哪个,哪个是哪个Magazine?这些类在客户端可能有完全不同的行为,因此知道这一点非常重要.
但是如果添加kind字段,序列化程序将能够选择正确的Item实现:
{
  "kind": "bookendpoint#Library"
  "items": [
           {"title":"My book","kind": "bookendpoint#Book"},
           {"title":"My magazine","kind": "bookendpoint#Magazine"},
      ]
}
这个etag领域
这个对我来说有点神秘.在HTTP协议中,ETag是资源的某种散列,用于在客户端缓存资源,如果没有更改则避免再次下载.
通常,服务器在为资源提供服务时将提供ETag,然后客户端将询问"给我该资源,除非ETag XXX仍然有效".仍然存在HTTP请求,但除非资源在服务器端发生更改,否则无需下载.
您可以在此维基百科页面上阅读有关ETag的更多信息.
ETag对Cloud Endpoints非常有用.我猜测Cloud Endpoints会计算它想要返回的响应的一些哈希值.如果此响应与etagCloud Endpoints客户端提供的字段匹配,则不会返回任何数据,而是发送HTTP 304 Not Modified响应.
| 归档时间: | 
 | 
| 查看次数: | 428 次 | 
| 最近记录: |