小编Dav*_*erg的帖子

如何组合websockets和http来创建一个REST API,使数据保持最新?

我正在考虑使用websockets和http构建REST API,我使用websockets告诉客户端新数据可用或直接向客户端提供新数据.

以下是它如何工作的一些不同的想法:
ws = websocket

想法A:

  1. 大卫得到所有用户 GET /users
  2. 雅各布添加一个用户 POST /users
  3. 将ws消息发送给具有新用户存在信息的所有客户端
  4. 大卫通过ws和电话回复了一条消息 GET /users

想法B:

  1. 大卫得到所有用户 GET /users
  2. 大卫注册以在完成更改时获取ws更新 /users
  3. 雅各布添加一个用户 POST /users
  4. 新用户由ws发送给David

想法C:

  1. 大卫得到所有用户 GET /users
  2. 大卫注册以在完成更改时获取ws更新 /users
  3. Jacob添加一个用户,POST /users它获得id 4
  4. David通过ws收到新用户的id 4
  5. 大卫得到了新用户 GET /users/4

我死了:

  1. 大卫得到所有用户 GET /users
  2. 大卫注册以在完成更改时获取ws更新/users.
  3. 雅各布添加一个用户 POST /users
  4. 大卫收到一条消息,表示已完成更改 /users
  5. 大卫只通过电话获得三角洲 GET /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请求.

rest jax-rs websocket restful-architecture

46
推荐指数
3
解决办法
8675
查看次数

使用 graphql 代码生成器时如何将自定义标量类型映射到打字稿类型?

名为的自定义标量类型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,但我不明白这是如何做到的。

typescript graphql graphql-codegen

9
推荐指数
1
解决办法
7385
查看次数

如何在REST API中表达查询参数之间的高级表达式?

问题(或缺少的特征)是不同查询参数之间缺乏表达可能性.当我看到它,你只能指定and参数之间,但是你怎么解决它,如果你想拥有not equal,orxor

我希望能够表达如下内容:

所有年龄在20岁或以博斯为名的用户

/用户年龄= 22?|名=博塞

除David和Lennart之外的所有用户

/用户?名字!=大卫&名字!=伦纳特

我的第一个想法是使用一个名为_filter的查询参数,并使用我的表达式获取一个String,如下所示:

所有年龄为22岁或姓名不是博士的用户

/ users?_filter = age eq 22或name neq Bosse

这个问题的最佳解决方案是什么?

我正在用Java和Jersey编写我的API,所以如果Jersey有任何特殊的解决方案,请告诉我.

java rest jax-rs jersey resteasy

8
推荐指数
1
解决办法
1099
查看次数

是否可以在 webpack 构建期间记录进度?

当我运行 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)

javascript node.js webpack

7
推荐指数
0
解决办法
7638
查看次数

生成服务客户端时,Reference.cs为空

我正在尝试在VS2012中设置VS2010项目,并且在生成服务引用时遇到问题.它失败了,Reference.cs变空了.

我看了一下:
由于DuplexBinding,WCF服务参考生成一个空的reference.cs
但是由于代码适用于VS2010,我宁愿不改变任何东西.

我试过这个:
有时添加WCF服务引用会生成一个空的reference.cs

然后它出现在Reference.cs中的代码但是缺少一些函数,所以项目不起作用.这样做有什么已知的问题吗?我完全陷入困境,需要一些想法.

提前致谢!
/大卫

wcf visual-studio-2010 visual-studio-2012

6
推荐指数
1
解决办法
4546
查看次数

如何处理REST API中的关系

我试图了解如何处理REST中的关系.

我读过这个问题.

如果我有司机汽车在我的API和驱动程序如果连接到一个只能存在我会让司机在子资源汽车.CarDriver之间的关系包含一组属性,比如说averageSpeedtimeOnTheRoad.一辆可以有很多司机,但司机只能有一辆.

我该如何添加新驱动程序?我该如何在司机和汽车之间添加关系?

如果我添加一个资源Wunderbaums,它不是汽车的子资源,但Car可以包含Wunderbaums.我该如何在CarWunderbaum之间添加关系?

在两个实体之间添加关系的一种方法是POST /entityA/{id}/entityB/{id}并发送正文中关系的属性.这可以用于我的汽车Wunderbaums示例,因为Wunderbaums不是汽车的子资源,但它在我的汽车驾驶员示例中不起作用,因为它会干扰驾驶员的 CRUD功能.路径cars/{id}/drivers{id}将创建之间的关系同样驱动程序作为创建驱动程序.

我还发现了关于这个问题的未解决的问题.

编辑1
@JB Nizet建议我把关系属性放在Driver里面,因为它有一对多的关系.这将是一个可能的解决方案,但如果一个 …

rest jax-rs restful-url restful-architecture

6
推荐指数
1
解决办法
1102
查看次数

如何在 Java 应用程序中使用 minim 库来检测音频源的节拍?

嗨,大家好!

我是音频编程的新手,想构建一个 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)

java audio javafx minim beat-detection

5
推荐指数
1
解决办法
2798
查看次数

如何检测本地网络中的特定设备?

我正在构建一个 IoT 解决方案,我将多个设备连接到我的本地网络,我想将这些设备连接到控制我的解决方案的集线器。

连接新设备后,我想将其与集线器连接并为其命名以进行识别。我想以自动方式实现检测(所以我不必手动输入 IP 地址)。例如,当网络中存在 Chromecast 时,我可以在手机的流媒体应用程序中看到它。所以我想做一些类似的事情来将集线器与设备连接起来。

到目前为止,我的想法是有两种方法可以做到这一点:

  1. 集线器扫描网络以查找新设备(定期或当我说有新设备存在时)。
  2. 一旦连接,设备就会扫描网络以找到集线器。

这些方法中的任何一种是否比另一种更受欢迎,在这种情况下为什么?

进行扫描时,无论我选择哪个方向,最有效的扫描方式是什么?我正在使用 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 的库/解决方案可以做到这一点?(如果实施“智能家居”设备,感觉就像一个常见问题)。

java network-programming iot esp8266 esp8266wifi

5
推荐指数
1
解决办法
484
查看次数

ArangoDB:将方案加载到新数据库的最佳方法是什么?

在启动ArangoDB的新实例时,加载数据库方案的最佳方法是什么?

我想在文件中定义集合和索引,然后以某种方式将其提供给Arango.

arangodb

4
推荐指数
1
解决办法
102
查看次数

如何在Apache中添加请求ID并将其转发到基础系统?

我想为通过apache完成的每个请求添加唯一的ID,该ID将在访问日志中使用,并转发到底层系统中的标头中,以便在其日志中使用。

要求编号

实现此目的的最佳解决方案是什么?

apache logging

3
推荐指数
1
解决办法
2256
查看次数

它是一个用于加载图像并获得http状态的Android库吗?

我有一个应用程序,我使用库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 android android-image android-ion android-imageview

0
推荐指数
1
解决办法
1842
查看次数