簡體   English   中英

如何使用Spring Cloud Function將功能映射到REST兼容端點

[英]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;
    };
}

問題:

  1. 是否可以使用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 
  2. 由於所有方法似乎都必須遵循空參數簽名的規則,因此如何避免端點的方法名稱沖突,否則將無法自動解決。 我從https://www.baeldung.com/spring-cloud-function開始,它看起來像RPC而不是REST

  3. 有沒有辦法識別URL參數?

     GET /books?sort=name 

他們的官方文檔或博客文章中均未明確指出這種方式。 我不能肯定地說它是為這種用例設計的。

無論如何,在文檔的一部分中。 提到以下內容:

函數也可以是Flux或Flux,Spring Cloud Function負責將數據與所需類型之間進行轉換,只要它們以純文本或(對於POJO而言)JSON形式出現即可。 還支持Message,該消息的標題是從傳入事件復制而來的,具體取決於適配器。 Web適配器還支持從表單編碼的數據到Map的轉換,如果您將該功能與Spring Cloud Stream一起使用,則消息有效負載的所有轉換和強制功能也將適用。

消息可以接受輸入和輸出,並且(如文檔中所述)它還具有對數據進行編碼的能力,以映射您可以在其中存儲查詢參數或標頭參數的位置。

這里是項目GitHub和官方文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM