1
오브젝트를 PATCH
'으로 허용하는 REST 스타일 API를 구현 중입니다. 동작은, 설정 될 수있는 다른 프로퍼티 중 하나를 터치하지 않고도 클래스 내의 하나 이상의 프로퍼티가 갱신되도록 허용하는 것이다.이것은 패치를위한 좋은 패턴입니까
이 부분은 ServiceStack OrmLite 페이지의 부분 업데이트 예제이지만 부분적으로 업데이트 할 필드를 나타내려면 하드 코딩이 필요합니다. 내 시나리오에서는 보낼 응용 프로그램을 결정할 때까지 의존하는 응용 프로그램을 사용합니다.
개체가 아직 보존되지 않았을 수도있는 시나리오에 대처해야합니다.
이 해결하기 위해 나는 다음과 같은 구현 :public object Patch(Myclass request)
{
HttpStatusCode SuccessCode;
try
{
var result = (MyClass)Get(request);
if (result != null)
{
request.PopulateWithNonDefaultValues(result);
dbFactory.Run(dbCmd => dbCmd.UpdateNonDefaults(request, r => r.myId == request.myId));
}
else
{
dbFactory.Run(dbCmd => dbCmd.Save(request));
}
SuccessCode = HttpStatusCode.Accepted;
}
catch (Exception e)
{
log.Error(e);
SuccessCode = HttpStatusCode.InternalServerError;
}
return new HttpResult()
{
StatusCode = SuccessCode
};
}
그것은 작동하지만, 뭔가 느낌이 좋지 않습니다, 나는 더 나은 방법이있을거야?
감사합니다. Mythz, Db가 이미 저를 위해 있었음을 눈치 채지 못했습니다! 그것은 ORMLite의 확장으로서 좋은 후보가 될 것인가? 그렇다면 Db.Patch (request)를 호출 할 수 있을까요? – MikeT
'db.UpdateNonDefaults'를 사용할 수도 있고, 업데이트 할 속성 만 가지고'db '를 호출하면 별도의 DTO (예 :'[Alias ("MyClass")] UpdateMyClass {...}})를 가질 수 있습니다. 업데이트 (요청)'. – mythz
내가 가진 문제는 패치가 DTO의 하나 이상의 속성을 업데이트하도록 허용하고 있으며, 변경되는 내용에 따라 앱/사용자까지입니다. – MikeT