首先,我非常抱歉,如果我的问题不明确,但我对网络服务知之甚少,而且各种可用信息的广泛性使我在过去几周内疯狂。所以请耐心等待我。
摘要:我想为Android创建一个实时分数更新应用。 (我没有添加android作为标记,因为我知道如何从twitter的JSON api中检索数据。)但是,就像twitter JSON api一样,我希望能够向Apache 7.0添加(POST可能?)数据我运行的服务。然后我想让应用程序能够检索我发布的这些数据。
我之前曾问过一个更通用的问题而且我被告知我应该查看一些api's。我做到了,但我仍然无法突破。
所以我的问题是:
在我的本地网络服务上设置API是否正确?
如果是这样,我如何设置将JSON对象返回到Android应用的API。此外,我需要能够使用新数据不断更新此API。
此外,我是否还需要为所有这些设置数据库?
任何能够很好解释的链接也会受到赞赏。
注意:我想通过Jersey使用RESTful Web服务执行此操作,并在检索期间使用JSON对象。
同样,尽管我尽力研究很多,但我对Web服务的可怕知识感到遗憾。我能做的最好的事情是让我的RESTful Web使用我在Eclipse中设置的一些预定义文本来响应GET。
感谢。
答案 0 :(得分:2)
如果我理解正确,你试图做的是这样的:
会有某种匹配或多种匹配。每当团队/玩家得分某人(即您)时,将使用该应用程序更新分数。之前订阅该比赛的人将收到通知并查看更新的分数。
即使我不熟悉基于Java的后端,但实现应该与其他编程语言非常相似。
首先,REST一般来说只有几句话。当您需要在多个设备和/或用户之间共享信息时,通常需要REST。这似乎就是这种情况。要实现REST,您需要一些API种类。在Web中,API由回答某些预定义HTTP Requests的网络服务器实现。
因此,在Web服务器上设置API是正确的方法。
接下来databases上的几句话。如果要持久存储信息,通常需要数据库。这可能是,也可能不是你打算做的。如果同时只有几个匹配并且您不关心数据的持久性,则可以使用Java在内存中存储匹配对象的集合。我只是说这是可能的,而不是一个好主意。一旦您的服务器崩溃或由于w / e原因导致内存不足,数据将会丢失。 (当然,在实际实现中,您希望以某种方式缓存当前匹配的数据并将对象保留在内存中)。
我建议使用数据库。
在数据库中,您可以存储和访问有关比赛的信息,例如得分,用户订阅,玩过谁等等。
JSON只是表示将在服务器和客户端之间共享的数据/对象的一种方式。您可以使用JSON对请求和响应数据/主体进行编码。
必须告知用户更新的分数。有两种基本方法可以做到这一点。 Push或Pull。通过拉取,客户端将在固定间隔或操作后检查更新的分数。通过推送,服务器将通知客户端有关更改的分数,这将导致他更新信息。由于您计划进行实时应用程序并使用Java,因此推送似乎是更好的方法。
最后但并非最不重要的是,让我们看看使用
的可能实现我们假设服务器将使用JSON-Objects响应HTTP请求( POST @ / api / my-endpoint )。
可能的流程
1) 首先,管理员创建匹配
REQUEST
POST @ /api/matches
body: team1=someteam&team2=someotherteam
服务器现在将创建一个匹配对象并将其存储在数据库中。响应将包含有关对象的信息以及操作是否成功。
2) 用户要求提供匹配列表
REQUEST
GET @ /api/matches/curret
响应将是一个包含当前匹配列表的JSON对象。
RESPONSE
{
matches: [
{id: 1, teams:...}, ...
]
}
3) (如果推) 用户订阅了匹配
REQUEST
GET @ /api/SOME_MATCH_ID/observe
现在将添加用户作为匹配的观察者。同样,响应包含有关操作是否成功的信息。
4) 管理员更新分数
REQUEST
UPDATE @ /api/SOME_MATCH_ID
body: team1scored...
分数现在在服务器上(在内存/数据库中)得到更新,并且将通知用户更新的分数。
5) 用户获得更新的分数
REQUEST
GET @ /api/SOME_MATCH_ID
RESPONSE
... (Updated score in some way)