首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在开发带有回调的API时,使用什么方法?

在开发带有回调的API时,使用什么方法?
EN

Stack Overflow用户
提问于 2017-04-20 12:36:06
回答 1查看 29关注 0票数 0

我应该使用什么方法来开发一个API,它接收两个移动并返回一个结果(输赢/平局)?

星条旗游戏

示例:

以字母L开头的动物

玩家1-移动:狮子玩家2-移动:里昂

thegame.com/api/v1/game/1/player/1/move/1

thegame.com/api/v1/game/1/player/2/move/1

  • 如何将结果返回给球员?
  • 对象玩家应该等待响应或询问结果吗?
  • 使用回调开发API的最佳方法是什么?
  • 有其他办法解决这种问题吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 18:01:03

复数更常见一些,如:

代码语言:javascript
运行
AI代码解释
复制
thegame.com/api/v1/games/1/players/1/moves/1

我认为更符合逻辑的是,动作直接处于游戏的下方,独立于玩家:

代码语言:javascript
运行
AI代码解释
复制
thegame.com/api/v1/games/1/moves/1

每个移动都有一个相关联的玩家做出了移动。这将使它很容易重新运行所有的移动和了解游戏的历史。

对于玩家来说,他们的规范URL将独立于游戏

代码语言:javascript
运行
AI代码解释
复制
thegame.com/api/v1/players/1

如果你愿意的话,你仍然可以有一种方法来访问玩家的所有游戏和游戏的所有玩家。

代码语言:javascript
运行
AI代码解释
复制
thegame.com/api/v1/players/1/games
thegame.com/api/v1/games/1/players

假设这是一个2(或更多)人之间的游戏,您可能会让每个客户端每隔几秒钟对该游戏进行一次投票。例如,如果一个客户已经做出了最新的举动,它就会开始轮询thegame.com/api/v1/games/1?moves_since=123456 URL。这将返回自时间戳123456以来的所有移动的列表。时间戳可能是该用户最后一次移动的时间。一旦它返回一个有效的移动,客户端将显示给用户,并等待他们自己移动。如果有几个玩家,“游戏”资源可能包括一个像"nextMover“这样的字段,以指示下一步要移动的玩家。

一种更现代的方法是使用类似Websockets的东西,这样,当发生更改时,客户端就会立即从服务器上得到推送。这基本上是一个类似的设计,但服务器立即通知所有客户端更新,而不是客户端轮询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43529438

复制
相关文章
Nginx重新编译添加模块
找到安装nginx的源码根目录,如果没有的话下载新的源码 http://nginx.org tar xvzf nginx-1.3.2.tar.gz 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录 cd nginx-1.3.2 以下是重新编译的代码和模块 ./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --w
CrazyCodes
2019/11/07
1.6K0
不重新编译PHP,单独添加扩展模块的方法
php自身提供了很多扩展,比如curl,gmp, mbstring等等。我们在编译安装php时未必安装了所有扩展。那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢?
跑马溜溜的球
2020/12/07
1.6K0
JS操作对象属性(获取、添加、删除、修改对象属性)
属性也称为名值对,包括属性名和属性值。属性名可以是包含空字符串在内的任意字符串,一个对象中不能存在两个同名的属性。属性值可以是任意类型的数据。
用户7741497
2022/03/19
16.6K0
Vue删除对象属性需要注意的地方
上面的一段代码是我们使用Vue时常用的,这样remarks就成为创建的Vue对象的一个属性,如果我们要添加Vue属性可以通过set方法:
johnhuster的分享
2022/03/28
9520
hadoop重新编译
yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool gcc-c++ openssl-devel ncurses-devel    
Dlimeng
2023/06/28
1890
重新编译mondrian
private synchronized ObjectPool getPool(Object key, ConnectionFactory connectionFactory) {
Dlimeng
2023/06/29
1670
CUDA跟OpenCV的混合编程,注意OpenCV需要重新编译
http://blog.csdn.net/wangyaninglm/article/details/39997113
流川疯
2022/11/29
4210
CUDA跟OpenCV的混合编程,注意OpenCV需要重新编译
apktool重新打包添加签名
一.生成apk apktool b 反编译后项目目录 -o 新apk名称.apk 二.生成签名 keytool -genkeypair -alias 新apk名称.apk -keyalg RSA -validity 100 -keystore app.keystore #拓展 -genkey 生成秘钥 -alias 别名 -keyalg 秘钥算法 -keysize 秘钥长度 -validity 有效期 -keystore 生成秘钥库的存储路径和名称 -keypass 秘钥口令 -storep
小小咸鱼YwY
2020/07/01
7430
QListWidget添加删除
qt和vc一样自由线程模式,线程间可以访问ui,但线程间访问qt内部封装问题,导致很多一样,可以使用信号和槽线程间传递数据,避免异常
sofu456
2020/08/11
1K0
Array对象---添加或删除数组中的元素->splice()
定义: splice() 方法用于添加或删除数组中的元素。(会修改原始数据) 参数说明: array.splice(index,howmany,item1,.....,itemX) 1、index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。(从0开始) 2、howmany 可选。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。 3、item1, ..., itemX 可选。要添加
听着music睡
2021/11/02
3.7K0
Hadoop-2.2.0在Unbuntu ADM64中需要重新编译Native Lib
通过:cat /etc/issue 查看当前系统版本: Ubuntu 12.04.3
星哥玩云
2022/06/29
3630
Fragment添加、删除、替换
前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加、删除、替换。 一、概述 在前面的学习中,特别是动态加载的时候,有提到FragmentManager和FragmentTransaction类,这里先来详细了解一下其到底为何物。 01FragmentManager 要管理Activity中的Fragments,就需要使用FragmentManager类。通过getFragmentMana
分享达人秀
2018/02/05
11.6K0
Fragment添加、删除、替换
13,Matplotlib面向对象绘图
Matplotlib是Python数据分析中用于数据可视化的最著名的一个库,其绘图方式和matlab中的绘图方式非常相似。
lyhue1991
2020/07/20
1.1K0
R语言绘图中添加公式
R语言在作图时难免会用到公式,往途中添加标签公式的方法有很多,R基础包自带的expression函数就是一个,除此之外还有latex2exp可以在R语言中使用latex的命令来给图片添加公式。本文基于expression函数常用的命令从常用的运算符、大型运算、集合运算、希腊字母等方面给出常用的公式命令。
拴小林
2021/10/11
2K0
R语言绘图中添加公式
jQuery实现动态添加和删除(点击按钮添加在页面添加和删除元素)
1:点击添加按钮弹出弹框,form表单可以填写相关的信息 2:点击保存按钮,相关信息会显示在界面的列表里
王小婷
2019/02/26
7.4K0
为什么不需要为Python对象添加 getter 和 setter
Getter 和 setter在java中被广泛使用。一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和setter函数以供外部使用。 这样做的好处是属性的具体实现被隐藏,当未来需要修改时,只需要修改getter 和 setter即可,而不用修改代码中所有引用这个属性的地方。可能做的修改为: 在获取或设置属性时打一条日志 设置属性时,对值对进检查 设置发生时, 修改设置的值 获取属性时,动态地计算值 可谓是好处多多,getter和setter为变量访问提供了灵活的方式。 但pyt
用户2176428
2018/06/27
1.3K0
mysql 查看索引、添加索引、删除索引命令添加索引删除索引
· Table 表的名称。 · Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。 · Column_name 列名称。 · Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。 · Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。 · Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 · Comment
一个会写诗的程序员
2018/08/17
3.5K0
tcsetpgrp failed重新编译tini
因为本人在腾讯,这是因为开发环境的 tlinux 的问题,导致 tini 出错了。寻找了很久,也没找到 特别有效的信息,于是查看一下 tini 的源码,看看 这个 错误是如何产生的。
runzhliu
2020/08/06
1.2K0
svn如何删除当前账号,重新登录
今天需要从svn上拉取工程,可是无论如何都显示我没有权限.思索半天才发现,我在eclipse填上远程链接后为什么没有提示我要输入账号和密码呢?原来我用的笔记本是之前公司别人用的,因此svn一定是记住了
全栈程序员站长
2022/06/30
2.3K0
svn如何删除当前账号,重新登录
点击加载更多

相似问题

如何在MYSQL中获得两个datetimes之间的差异?

50

如何在Server中获得两个日期之间的秒数?

46

如何在javascript中获得两个日期之间的秒数?

20

计算两个XQuery之间的秒数的dateTimes表达式是什么?

12

如何在Oracle中查找两个datetimes之间的差异

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文