2016-07-19 2 views
3

Я хочу получить ответ 304 с последним измененным заголовком.Api gateway 304 ответов с последним измененным заголовком

Сначала я использую ответ об ошибке для реализации.

Handler.js

module.exports.handler = function(event, context, cb) { 
    const UpdateDate = new Date(); 
    return cb("304 Not Modified", { 
    "Last-Modified": UpdateDate, 
    "body":{ 
     "message": {} 
    } 
    }); 
}; 

s-function.json в конечных точках

"responses": { 
    "304 Not Modified.*": { 
     "statusCode": "304", 
     "responseParameters": { 
     "method.response.header.Last-Modified": "integration.response.body.Last-Modified" 
     }, 
     "responseModels": { 
     "application/json;charset=UTF-8": "Empty" 
     }, 
     "responseTemplates": { 
     "application/json;charset=UTF-8": "$input.json('$.body')" 
     } 
    }, 
    "default": { 
     "statusCode": "200", 
     "responseParameters": { 
     "method.response.header.Cache-Control": "'public, max-age=86400'", 
     "method.response.header.Last-Modified": "integration.response.body.Last-Modified" 
     }, 
     "responseModels": { 
     "application/json;charset=UTF-8": "Empty" 
     }, 
     "responseTemplates": { 
     "application/json;charset=UTF-8": "$input.json('$.body')" 

     } 
    } 
} 

Однако я нахожу его на лямбда-документ.

При возникновении ошибки параметр обратного вызова игнорируется.

Таким образом, это не работает.

Есть ли какое-либо решение ответа 304 с заголовком?

Обновлено:

Можно ли вернуть объект ошибки и карты ответов 304 в с-функции? Ниже код не может сопоставить 304.

S-funtion.json

"responses": { 
    ".*304 Not Modified.*": { 
     "statusCode": "304", 
     "responseParameters": { 
     "method.response.header.Cache-Control": "'public, max-age=86400'", 
     "method.response.header.Last-Modified": "integration.response.body.errorMessage.Last-Modified" 
     } 
} 

Handler.js

return cb({ 
    "status" : "304 Not Modified", 
    "Last-Modified": UpdateDate 
), null); 

Я также попробовать это. Это может отображение до 304, но заголовок не может получить «integration.response.body.errorMessage.Last-Modified»

return cb(JSON.stringify({ 
    "status" : "304 Not Modified", 
    "Last-Modified": UpdateDate 
}), null); 

Стараюсь $ util.parseJson, но не работает на responseParameter.

выражение Invalid отображение указано:. $ Util.parseJson ($ input.path ('$ ErrorMessage')) Last-Modified

"responseParameters": { 
     "method.response.header.Cache-Control": "'public, max-age=86400'", 
     "method.response.header.Last-Modified": "$util.parseJson($input.path('$.errorMessage')).Last-Modified" 
    }, 
+0

Пожалуйста, посмотрите на ссылку Райана в варианте 2. Ваше обновление фактически не возвращает ошибку. –

+0

@BobKinney Возврат ошибки. В журналах CloudWatch: { "errorMessage": "{\" status \ ": \" 304 Not Modified \ ", \" Last-Modified \ ": \" 2016-07-22T01: 58: 10.857Z \ "} " } – Jim

+0

Сторона примечания, 304 не должны возвращать тела реакции в соответствии с W3. Просто обратимся к вашему 1-му примеру. – arjabbar

ответ

2

Чтобы вернуть статус 304 в вашем API, вам вам нужно будет выдать ошибку из вашей лямбда-функции. Можно вернуть значение «Последнее изменение» в сообщении об ошибке из вашей функции Lambda и направить его в заголовок «Last-Modified» в ответе API.

Для получения дополнительной информации посмотрите на Вариант 2 here

Спасибо, Райан

+0

Спасибо, это мне очень помогает. И я обновляю свой вопрос! – Jim