![](/img/trans.png)
[英]How to expose multiple function endpoints with Spring Cloud Function?
[英]How to map functions to REST compliant endpoints with Spring Cloud Function
我遇到了不尋常且有趣的技術,以及使用Spring Cloud Function拆分業務和技術實現的方式,該實現使java.util.function
類的實現充當端點
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
簡而言之,有一個簡單的靜態List<Book>
代表存儲庫:
private final static List<Book> books = Arrays.asList(
new Book(1, "One"),
new Book(2, "Two"),
new Book(3, "Three"));
以下@Bean
根據方法名稱及其返回類型啟用指定的端點:
// GET localhost:8080/books -> returns all the books:
@Bean
public Supplier<List<Book>> books() {
return () -> books;
}
// GET localhost:8080/book/2 -> returns a particular book
@Bean
public Function<Integer, List<Book>> book() {
return id -> books.stream().filter(b -> b.getId() == id).collect(Collectors.toList());
}
// POST localhost:8080/newBook -> posts a new book and returns all of them
// Consumer<Book> would supply the POST with no output
@Bean
public Function<Book, List<Book>> newBook() {
return book -> {
books.add(book);
return books;
};
}
問題:
是否可以使用java.util.function
組合的一個或多個類來實現完全符合REST的解決方案? 我只能撰寫以上內容。 我對以下模式特別感興趣:
GET /books GET /books/1 POST /books PUT/PATCH /books/1 DELETE /books/1 GET /books/1/chapters/2/paragraphs/3
由於所有方法似乎都必須遵循空參數簽名的規則,因此如何避免端點的方法名稱沖突,否則將無法自動解決。 我從https://www.baeldung.com/spring-cloud-function開始,它看起來像RPC而不是REST 。
有沒有辦法識別URL參數?
GET /books?sort=name
他們的官方文檔或博客文章中均未明確指出這種方式。 我不能肯定地說它是為這種用例設計的。
無論如何,在文檔的一部分中。 提到以下內容:
函數也可以是Flux或Flux,Spring Cloud Function負責將數據與所需類型之間進行轉換,只要它們以純文本或(對於POJO而言)JSON形式出現即可。 還支持Message,該消息的標題是從傳入事件復制而來的,具體取決於適配器。 Web適配器還支持從表單編碼的數據到Map的轉換,如果您將該功能與Spring Cloud Stream一起使用,則消息有效負載的所有轉換和強制功能也將適用。
消息可以接受輸入和輸出,並且(如文檔中所述)它還具有對數據進行編碼的能力,以映射您可以在其中存儲查詢參數或標頭參數的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.