获取最后添加的元素的最佳做法是什么(假设我们知道因为资源上的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
并将返回一个元素。
如果有一种模式,我正在寻找最佳实践。
谢谢!
答案 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,例如123
或A567
与特殊ID,例如&#39; last`。