[英]How can i create new score for existing player and game at the different time in the POST method of Spring Boot rest api
[英]REST method to Create new resource using POST
我的請求中沒有ID。
服務器將使用自動生成的ID創建新資源(即使同一數據存在,但ID也不同),例如1234
必須在響應中返回新的資源位置/ users / 1234
現在,我是否應該僅將新ID作為響應中的返回值或輸入請求中設置的新ID返回並返回整個實體? {“ id”:1234,“ name”:“ Mr。 伍茲”,“年齡”:29}
另外,當一個請求到達POST / users但已經在輸入中提供了ID時,我們是否需要在創建一個新請求之前驗證它是否為null? 如果輸入中存在ID,在這種情況下,Http響應代碼是什么?
我將使用spring hateoas( https://spring.io/projects/spring-hateoas )並創建一個像這樣的對象:
public class User extends ResourceSupport {
private Long id;
private int age;
private String name;
//Setter and getter and eventually hashCode and equals
}
然后在控制器中,我將采用以下方法:
@RequestMapping(value="/users", method={RequestMethod.POST}, produces="application/json")
public ResponseEntity<User> managePerson(@RequestBody User p)
{
if(p.getId() != null)
{
//Update; in this case a 204 http status is enough and no content is required
Return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
}
else
{
//Save and return the saved objecty with the returned ID and set the new location
p.add(new Link("/users/"+p.getId()));
Return ResponseEntity.status(HttpStatus.OK).body(p);
}
}
現在,我是否應該僅將新ID作為響應中的返回值或輸入請求中設置的新ID返回並返回整個實體? {“ id”:1234,“ name”:“ Mr。 伍茲”,“年齡”:29}
成功的Rest POST
請求不一定需要具有響應正文,總的來說,如果這些完全是請求中提供的相同數據+創建的ID。
在location header
中包含所創建資源的URI的201 Created
響應看起來不錯。
這並不意味着禁止在POST響應中設置正文,僅當它為客戶端添加了一些附加值時才應設置它。
例如,假設資源創建可能會更改客戶端提供的數據(清理,計算等),那么在主體響應中設置資源可能是有意義的。
另外,當一個請求到達POST / users但已經在輸入中提供了ID時,我們是否需要在創建一個新請求之前驗證它是否為null? 如果輸入中存在ID,在這種情況下,Http響應代碼是什么?
這取決於您希望Rest服務的行為方式:
POST
:在該ID是否這種情況下null
,創建資源,如果它不是null
,您更新資源,如果一切都很好,你可以返回202 Accepted
。 POST
更新是不合法的:在另一種情況下,如果ID不為null
,則會返回錯誤響應,例如400 Bad Request
。 我的請求中沒有ID。
您不需要一個。 您只需為此使用Db-SDK。
必須在響應中返回新的資源位置/ users / 1234
最好使其成為超媒體驅動的系統HATEOS
現在,我是否應該僅將新ID作為響應中的返回值或輸入請求中設置的新ID返回並返回整個實體? {“ id”:1234,“ name”:“ Mr。 伍茲”,“年齡”:29}
就像我說的那樣,返回完整的超媒體信息是很好的,這樣客戶端可以無需進一步修改即可引用它們,以發出任何輕松的請求
{
"id": 1234,
"name": "Mr.Woods",
"age": 29,
"address": "/1234/address",
"some-param": "/path-to-the-resource"
}
另外,當一個請求到達POST / users但已經在輸入中提供了ID時,我們是否需要在創建一個新請求之前驗證它是否為null?
理想情況下,如果遵循HTTP規范,則應對其進行驗證。 發布應始終導致資源的創建。 但是,這只是遵循規范,如果您希望使POST冪等,則不會阻止您
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.