簡體   English   中英

在REST API中實現子資源

[英]implement sub-resource in REST API

我需要在REST API中實現子資源

網址將如下所示:
https:// localhost:8080 / v1 / student / {id}?include =地址,資格,登錄

因此,address,qualification和login是三個子資源,如果我們將其添加為query param,則將包括這些子資源。Subresource可以是數據庫調用或其他服務的rest調用

問題發生在實現方面,我已經將@RequestParam List包括在內

所以目前我在服務課上這樣寫

 public Student getStudentDetail(Integer id ,List<String> include){
    Student student = new Student();
    // setting student details
    for(String itr: include){
    if(itr=="address"){
    student.setAddress(repo.getAddress(id));
    }
    if(itr=="qualification"){
    student.setQualication(repo.getQualification(id));
    }
    if(itr=="login"){
    student.setLogin(client.getLogin(id));// here client in Rest Call for 
    }


   }
    return student;
    }

學生班:

@Data
public Class Student{
private String id;

private List<Address> address;

private List<Qualification> qualification;

private Login login; 
}

所以在這里我需要為每個子資源添加條件,您能否建議任何更好的方法或任何設計原則。

還有另一種使用反射API在運行時獲取存儲庫方法名稱的方法,但這增加了調用的額外開銷。

另一種方法可以是:

我可以使用策略設計模式

Abstract Class 

public Abstract class Subresource{
public Student getSubresouce(Integer id,Student student){}
}

public class Address extends Subresource{
@Autowired
Databaserepo repo;

public Student getSubresource(Integer id , Student student){
  return student.setAddress(repo.getAddress(id));
}
}

public class Login extends Subresource{
@Autowired
RestClient client;

public Student getSubresource(Integer id, Student student){
 return student.setLogin(client.getLogin(id));
}
}

但是用這種方法我無法在服務中編寫邏輯

  public Student getStudentDetail(Integer id ,List<String> include){
        Student student = new Student();
        // setting student details
        for(String itr: include){
       // Need to fill logic
// Help me here to define logic to use strategy oattern
       }
        return student;
        }

您正在尋找的是投影。 從這個連結

投影是客戶端僅從對象請求特定字段而不是整個對象的一種方法。 當只需要一個對象的幾個字段時使用投影是一種自我記錄代碼,減少響應負載,甚至允許服務器放松其他耗時的計算或IO操作的好方法。

如果您使用的是Spring ,請參考以下示例。

暫無
暫無

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

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