我正在考虑使用websockets和http构建REST API,我使用websockets告诉客户端新数据可用或直接向客户端提供新数据.
以下是它如何工作的一些不同的想法:
ws = websocket
想法A:
GET /usersPOST /usersGET /users想法B:
GET /users/usersPOST /users想法C:
GET /users/usersPOST /users它获得id 4GET /users/4我死了:
GET /users/users.POST /users/usersGET /users?lastcall='time of step one'哪种选择最好,有哪些优缺点?
这是另一个更好的'Idea E'吗?
我们甚至需要使用REST还是需要所有数据?
编辑
为了解决数据不同步的问题,我们可以提供标题
"If-Unmodified-Since"
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since
或"E-Tag"
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
或两者都有PUT请求.
名为的自定义标量类型Date后端定义了
在前端“GraphQL 代码生成器”(https://www.graphql-code-generator.com/)用于从模式生成打字稿类型。
看起来codegen.yml像这样:
overwrite: true
schema: 'http://mybackenurl/graphql'
documents: 'src/**/*.graphql'
generates:
src/generated/graphql.ts:
config:
exposeQueryKeys: true
exposeFetcher: true
fetcher: '../GraphQLFetcher#fetcher'
scalars:
Date: Date
plugins:
- 'typescript'
- 'typescript-operations'
- 'typescript-react-query'
Run Code Online (Sandbox Code Playgroud)
这给出了其中 graphql 模式中具有自定义标量类型的所有字段Date对应于Date生成的打字稿类型中的打字稿类型的类型。然而在运行时它仍然是一个string. Date: Date如果去掉配置中标量不足的部分,则对应的类型为Any,则对应的类型为。
猜测是我们需要指定某种映射器,它将我们从后端获得的 ISO 8601 字符串转换为 typescript Date,但我不明白这是如何做到的。
问题(或缺少的特征)是不同查询参数之间缺乏表达可能性.当我看到它,你只能指定and参数之间,但是你怎么解决它,如果你想拥有not equal,or或xor?
我希望能够表达如下内容:
所有年龄在20岁或以博斯为名的用户
/用户年龄= 22?|名=博塞
除David和Lennart之外的所有用户
/用户?名字!=大卫&名字!=伦纳特
我的第一个想法是使用一个名为_filter的查询参数,并使用我的表达式获取一个String,如下所示:
所有年龄为22岁或姓名不是博士的用户
/ users?_filter = age eq 22或name neq Bosse
这个问题的最佳解决方案是什么?
我正在用Java和Jersey编写我的API,所以如果Jersey有任何特殊的解决方案,请告诉我.
当我运行 linting 时,如果出现问题,我会收到错误,否则我不会收到执行 linting 的通知。是否可以在执行插件或加载程序后添加日志消息?
在我的特定情况下,我想在“StyleLintPlugin”插件和“tslint”加载器之后添加日志消息。请参阅下面的 Webpack 配置。
import path from 'path';
import StyleLintPlugin from 'stylelint-webpack-plugin';
module.exports = {
entry: path.resolve(__dirname, "js/index"),
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "build"),
publicPath: '/'
},
target: 'web',
watch: true, //Rebuild when file is changed
devtool: 'source-map', //Let us debug the code without being modified
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.js', '.css', '.scss']
},
plugins: [
//Used to lint sass files
new StyleLintPlugin({
configFile: '.stylelintrc',
context: undefined,
files: ['**/*.s?(a|c)ss'],
failOnError: true,
quiet: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在VS2012中设置VS2010项目,并且在生成服务引用时遇到问题.它失败了,Reference.cs变空了.
我看了一下:
由于DuplexBinding,WCF服务参考生成一个空的reference.cs
但是由于代码适用于VS2010,我宁愿不改变任何东西.
我试过这个:
有时添加WCF服务引用会生成一个空的reference.cs
然后它出现在Reference.cs中的代码但是缺少一些函数,所以项目不起作用.这样做有什么已知的问题吗?我完全陷入困境,需要一些想法.
提前致谢!
/大卫
我试图了解如何处理REST中的关系.
我读过这个问题.
如果我有司机和汽车在我的API和驱动程序如果连接到一个只能存在车我会让司机在子资源汽车.Car和Driver之间的关系包含一组属性,比如说averageSpeed和timeOnTheRoad.一辆车可以有很多司机,但司机只能有一辆车.
我该如何添加新驱动程序?我该如何在司机和汽车之间添加关系?
如果我添加一个资源Wunderbaums,它不是汽车的子资源,但Car可以包含Wunderbaums.我该如何在Car和Wunderbaum之间添加关系?
在两个实体之间添加关系的一种方法是POST /entityA/{id}/entityB/{id}并发送正文中关系的属性.这可以用于我的汽车和Wunderbaums示例,因为Wunderbaums不是汽车的子资源,但它在我的汽车和驾驶员示例中不起作用,因为它会干扰驾驶员的 CRUD功能.路径cars/{id}/drivers{id}将创建之间的关系同样车和驱动程序作为创建驱动程序.
我还发现了关于这个问题的未解决的问题.
编辑1
@JB Nizet建议我把关系属性放在Driver里面,因为它有一对多的关系.这将是一个可能的解决方案,但如果一个 …
嗨,大家好!
我是音频编程的新手,想构建一个 Java FX 应用程序,它与来自我的麦克风或线路输出的音频进行交互。
我在谷歌上搜索图书馆,发现 minim 似乎很受欢迎。它是为处理而编写的,但您也可以在 Java 中使用它。问题是我没有找到关于如何做到这一点的好文档。(我不想使用处理的原因是我想构建一个非常高级的gui,我认为在JavaFX中更容易做到)。
作为第一步,我试图建立一个对歌曲中的每个节拍都有反应的库。我的代码如下所示:
public class Main extends Application {
/* Used to trick minim constructor (needs an object with those methods) */
class MinimInput {
String sketchPath( String fileName ) {
return "";
}
InputStream createInput(String fileName) {
return new InputStream() {
@Override
public int read() throws IOException {
return 0;
}
};
};
}
@Override
public void start(Stage stage) throws Exception {
...
//Some gui logic here!
...
stage.setScene(scene);
stage.show();
/* …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 IoT 解决方案,我将多个设备连接到我的本地网络,我想将这些设备连接到控制我的解决方案的集线器。
连接新设备后,我想将其与集线器连接并为其命名以进行识别。我想以自动方式实现检测(所以我不必手动输入 IP 地址)。例如,当网络中存在 Chromecast 时,我可以在手机的流媒体应用程序中看到它。所以我想做一些类似的事情来将集线器与设备连接起来。
到目前为止,我的想法是有两种方法可以做到这一点:
这些方法中的任何一种是否比另一种更受欢迎,在这种情况下为什么?
进行扫描时,无论我选择哪个方向,最有效的扫描方式是什么?我正在使用 Java 进行实现,到目前为止我所拥有的是:
int timeout = 100;
for (int i = 1; i < 255; i++)
{
String host = subnet + "." + i;
if (InetAddress.getByName(host).isReachable(timeout))
{
String hostname = InetAddress.getByName(host).getHostName();
String canonicalHostName = InetAddress.getByName(host).getCanonicalHostName();
System.out.println(host + " is reachable. Hostname: " + hostname + ", CanonicalHostName: " + canonicalHostName);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里看到的是,对于我网络中的大多数内容,返回的主机名只是 IP 地址,而不是我在路由器中看到的主机名。我想我可以使用主机名作为识别器来检测特定设备并了解它们的位置 - 但是这个小 poc 似乎不起作用。那么如何才能很好地识别设备呢?
是否有任何适用于 Java(或 Javascript)和 ESP8266 的库/解决方案可以做到这一点?(如果实施“智能家居”设备,感觉就像一个常见问题)。
在启动ArangoDB的新实例时,加载数据库方案的最佳方法是什么?
我想在文件中定义集合和索引,然后以某种方式将其提供给Arango.
我有一个应用程序,我使用库Ion(https://github.com/koush/ion).问题是我意识到我需要在加载失败时获得http状态.
我有一个休息服务,根据出了什么问题返回不同的状态,并且需要在应用程序中有不同的逻辑.
这是休息服务的代码:
@GET
@Path("/damages/image/get")
@Produces("image/jpeg")
@Override
public Response getImage() {
byte[] byteImage;
try {
//Getting the image here
...
} catch (ExceptionTypeA e) {
return Response.status(204).entity(null).build();
} catch (ExceptionTypeB e) {
return Response.status(503).entity(null).build();
}
return Response.ok(image).build();
}
Run Code Online (Sandbox Code Playgroud)
这是我用来获取图像的代码:
...
Ion.with(imageView)
.error(R.drawable.ic_menu_camera)
.load(imageUrl).setCallback(new FutureCallback<ImageView>() {
@Override
public void onCompleted(Exception ex, ImageView iv) {
//I need to get the HTTP-status here.
}
});
...
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
Ion
.with(getApplicationContext())
.load(imageUrl)
.as(new TypeToken<byte[]>(){})
.withResponse()
.setCallback(new FutureCallback<Response<byte[]>>() {
@Override
public void onCompleted(Exception e, …Run Code Online (Sandbox Code Playgroud) rest ×4
java ×3
jax-rs ×3
android ×1
android-ion ×1
apache ×1
arangodb ×1
audio ×1
esp8266 ×1
esp8266wifi ×1
graphql ×1
iot ×1
javafx ×1
javascript ×1
jersey ×1
logging ×1
minim ×1
node.js ×1
resteasy ×1
restful-url ×1
typescript ×1
wcf ×1
webpack ×1
websocket ×1