27 #ifndef TENSORFLOW_SERVING_UTIL_NET_HTTP_SERVER_PUBLIC_SERVER_REQUEST_INTERFACE_H_
28 #define TENSORFLOW_SERVING_UTIL_NET_HTTP_SERVER_PUBLIC_SERVER_REQUEST_INTERFACE_H_
35 #include "absl/strings/string_view.h"
36 #include "tensorflow_serving/util/net_http/public/response_code_enum.h"
38 namespace tensorflow {
49 inline void operator()(
char* ptr)
const {
51 std::allocator<char>().deallocate(ptr,
static_cast<std::size_t
>(size_));
67 virtual absl::string_view uri_path()
const = 0;
71 virtual absl::string_view http_method()
const = 0;
85 virtual void WriteResponseBytes(
const char* data, int64_t size) = 0;
89 virtual void WriteResponseString(absl::string_view data) = 0;
101 virtual std::unique_ptr<char[], ServerRequestInterface::BlockDeleter>
102 ReadRequestBytes(int64_t* size) = 0;
107 virtual absl::string_view GetRequestHeader(
108 absl::string_view header)
const = 0;
114 virtual std::vector<absl::string_view> request_headers()
const = 0;
116 virtual void OverwriteResponseHeader(absl::string_view header,
117 absl::string_view value) = 0;
118 virtual void AppendResponseHeader(absl::string_view header,
119 absl::string_view value) = 0;
122 enum class BodyStatus {
133 enum class CallbackStatus {
146 virtual void PartialReplyWithStatus(HTTPStatusCode status) = 0;
147 virtual void PartialReply() = 0;
164 virtual CallbackStatus PartialReplyWithFlushCallback(
165 std::function<
void()> callback) = 0;
166 virtual BodyStatus response_body_status() {
return BodyStatus::PENDING; }
169 virtual BodyStatus request_body_status() {
return BodyStatus::COMPLETE; }
177 virtual void ReplyWithStatus(HTTPStatusCode status) = 0;
178 virtual void Reply() = 0;
183 virtual void Abort() = 0;
186 ServerRequestInterface() =
default;
194 inline void SetContentType(ServerRequestInterface* request,
195 absl::string_view type) {
196 request->OverwriteResponseHeader(
"Content-Type", type);
199 inline void SetContentTypeHTML(ServerRequestInterface* request) {
200 SetContentType(request,
"text/html");
203 inline void SetContentTypeTEXT(ServerRequestInterface* request) {
204 SetContentType(request,
"text/plain");