RESTful API - 获取元素的最后一个

时间:2016-11-29 15:56:58

标签: rest api

获取最后添加的元素的最佳做法是什么(假设我们知道因为资源上的created_at字段)。

是否应该在1上调用get all with max results,如:

public class Inderxer {

  public void indexFolder(Path path) throws IOException {
      List<Image> images = new LinkedList<>();
       Files.walk(path).parallel().forEach(E -> {
        if (!E.toFile().isDirectory() && !E.toFile().getName().contains(".DS") && FilenameUtils.getExtension(E.toFile().toString()) != ".kmz") {
            try {

                Metadata metadata = ImageMetadataReader.readMetadata(E.toFile());
                if (FilenameUtils.getExtension(E.toFile().toString()).contains("jpg")) {
                    List<Directory> dirs = metadata.getDirectoriesOfType(JpegDirectory.class).stream().collect(Collectors.toList());
                    images.add(new Image(E.getFileName().toString(), FilenameUtils.getExtension(E.toFile().toString()), dirs));
                } else {
                    List<Directory> dirs = metadata.getDirectoriesOfType(PngDirectory.class).stream().collect(Collectors.toList());
                    images.add(new Image(E.getFileName().toString(), FilenameUtils.getExtension(E.toFile().toString()), dirs));
                }

            } catch (ImageProcessingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    images.stream()
            .forEach(M -> M.getDirectory().stream()
                    .forEach(D -> {
                        if (!M.getType().equals("png")) {
                            M.setSize(createDimentionArray(D.getDescription(1), D.getDescription(3), "jpg"));
                        } else {
                            M.setSize(createDimentionArray(D.getDescription(1), D.getDescription(2), "png"));
                        }
                    }));

    images.forEach(System.out::println);
}

private String createDimentionArray(String h, String w, String type) {
    String res = "";
    if (type.equals("jpg")) {
        if (h != null && w != null) {
            String[] hsplit = h.split("pixels");
            String[] wsplit = w.split("pixels");
            if (hsplit[0] != null && wsplit[0] != null) {
                res = hsplit[0]; //Hight
                res += wsplit[0]; //Width
                res += "\n";
            }
            return res;
        } else {
            return null;
        }

    } else {
        if (h != null && w != null) {
            String[] hsplit = h.split("pixels");
            String[] wsplit = w.split("pixels");
            if (hsplit[0] != null && wsplit[0] != null) {
                res = hsplit[0]; //Hight
                res += " ";
                res += wsplit[0]; //Width
                res += "\n";
            }
            return res;
        } else {
            return null;
        }
    }
  }
}

并将返回一个元素的数组

或者可能是“特殊”电话,如:

GET ../rest/v1/article?page=0&size=1&order=created_at,desc

并将返回一个元素。

如果有一种模式,我正在寻找最佳实践。

谢谢!

2 个答案:

答案 0 :(得分:3)

我不是RESTful专家,但在我看来,第一个解决方案似乎是最好的。

第二种更实用,但路线通常与资源相关,添加“最后”,特别是前面加上“/”对我来说似乎很奇怪。

此外,API用户通常使用排序参数,那么需要10个最后元素的用户呢?

如果您在../rest/v1/article之后添加内容,则必须是某个特定元素,子资源或CRUD之外的操作的ID,如../rest/v1/article/:id/subscription

答案 1 :(得分:0)

这两个网址都是RESTful并标识资源。当然第一个会返回一个包含单个元素的集合,而第二个会直接返回这个元素。

如果您支持分页和排序,则会自动支持第一个表单

你写

  

或者可能是&#34;特别&#34;调用

我不认为这是&#39;或者&#39;它应该是&#39;和&#39;。 第二种形式可选,它可能会有所帮助。如果您有像

这样的网址格式
GET ../rest/v1/article/{id}

很容易实现逻辑,可以区分普通ID,例如123A567与特殊ID,例如&#39; last`。