如何在谷歌端点将数据从后端传递到客户端?

时间:2016-07-03 15:46:07

标签: android client backend google-cloud-endpoints

在我的Android应用程序的端点类中,我返回一个实体的Profile对象。我想将数据传递回前端。

这样做的最佳方式是什么,模型应该在哪里 存储,在前端或后端,或者可能在两者中存储?

修改

例如,在异步任务中,我执行以下操作:

try {
    return mApi.saveProfile(firstName, lastName, birthday, userId).execute().getFirstName();
} catch (IOException e) {
    return e.getMessage();
}

这将调用端点后端方法saveProfile,它位于Android应用程序的单独模块中。该方法执行此操作:

@ApiMethod(name = "saveProfile")
    public Profile saveProfile(@Named("firstName") String firstName,
                               @Named("lastName") String lastName,
                               @Named("birthday") String birthday,
                               @Named("userId") String userId) {
        Profile profile = ofy().load().key(Key.create(Profile.class, userId)).now();
        if (profile == null) {
            profile = new Profile(userId, firstName, lastName, birthday);
        } else {
            profile.updateProfile(firstName, lastName, birthday);
        }
        ofy().save().entity(profile).now();
        return profile;
    }

此方法将后端端点模块中的配置文件实体返回到调用它的位置,在本例中为位于应用程序模块(客户端)中的异步任务。

我可以使用配置文件对象并在后端模块上添加依赖项,以便我在客户端中使用此对象,还是应该在后端返回另一个对象?

在方法saveProfile中有很多参数,我想传入一个直接包含所有这些字段的对象但是如何使用端点这样做,就像我一样,我需要添加一个依赖后端模块,以便识别类?那么配置文件实体是否应该存储在后端,并且配置文件表单(saveProfile参数)应该位于后端还是客户端?

2 个答案:

答案 0 :(得分:1)

您可以直接传递Profile对象,而不是将参数逐个传递给saveProfile方法(作为通过@Named注释识别的非实体参数)。您的方法如下:

@ApiMethod(name = "saveProfile")
public Profile saveProfile(Profile sentProfile) {

然后,在您的端点中,您只需通过相应的getter获取sentProfile的属性。

序列化/反序列化将由端点“框架”自动完成。

查看Romin Irani的本教程,了解有关如何将实体从Android应用程序发送到端点后端的更多详细信息,反之亦然:https://rominirani.com/google-cloud-endpoints-tutorial-part-3-f8a632fa18b1#.ydrtdy17k

另一种方法是,你可以看看这个Udacity MOOC:https://www.udacity.com/course/progress#!/c-ud859

他们使用名为XXXXForm的额外实体将数据从前端传送到后端。

答案 1 :(得分:0)

实体/模型类存储在客户端(前端)和服务器(后端)上。通过serialization在服务器和客户端之间发送数据。一种形式的序列化是JSON。

  

JSON是一种对字符串中的对象进行编码的格式。序列化意味着   将对象转换为该字符串,反序列化就是它   逆操作。

为您的后端服务找到一个JSON库,您可以轻松使用它,并将您的模型类序列化以发送到Android设备。一旦您在Android设备上收到JSON数据,您就可以再次使用任何可以轻松使用JSON的东西。我建议使用GSON库,到目前为止它对我们来说效果很好。