«Недостающее время окончания» с Календарем Google и Пакетом Google Ракетки

Я используюGoogle API библиотека длярэкет попытаться обновить Календарь Google. (API неполон, поэтому я расширяю его по мере продвижения.)

Кажется, у меня проблемы с добавлением событий в календарь с помощью метода events.insert. Код, который выполняет вставку, выглядит следующим образом:

(define (insert-events calendar-id
                       event
                       #:token [t #f]
                       #:max-attendees [max-attendees #f]
                       #:send-notifications [send-notifications #f]
                       #:supports-attachments [supports-attachments #f])
  (json-api-post (string->url
                  (format
                   "https://www.googleapis.com/calendar/v3/calendars/~a/events"
                   (form-urlencoded-encode calendar-id)))
                  event
                  #:token t))


(define (json-api-post u b
                       #:token [t #f]
                       #:headers [headers '()])
  (define b* (jsexpr->bytes b))
  (let retry ([t t]
              [retry-counter 0])
    (parse-json-response
     (POST-string u b* (if t (cons (token->authorization-header t) headers) headers))
     retry
     t
     retry-counter)))

(define (POST-string u b headers)
  (port->string (post-pure-port u b headers)))

Однако, независимо от того, как я использую вызов, я всегда получаю сообщение об ошибке 400 с сообщением: «Отсутствует время окончания». Я проверилэтот вопрос чтобы убедиться, что я отправил свой запрос правильно. Который я, кажется, Для справки, объект JSON, который я отправляю:

{
 "end": {
  "dateTime": "2016-05-30T14:00:00-04:00"
 },
 "start": {
  "dateTime": "2016-05-30T13:00:00-04:00"
 }
}

Кроме того, чтобы убедиться, что у меня был правильный доступ к правильному ключу и идентификатору календаря, я настроил эхо-сервер для своей локальной машины и изменил URL сgoogle.com вlocalhostмой ответ кажется нормальным:

POST /<Calendar-Id-Redacted> HTTP/1.1
Host: localhost
User-Agent: Racket/6.5.0.5 (net/http-client)
Content-Length: 116
Authorization: Bearer <Key-Redacted>

{
 "end": {
  "dateTime": "2016-05-30T14:00:00-04:00"
 },
 "start": {
  "dateTime": "2016-05-30T13:00:00-04:00"
 }
}

Кажется, я все делаю правильно. И даже если в моем коде Racket была ошибка, отправка точно такого же объекта JSON через веб-консоль разработчика Google, кажется, работает как задумано. Так почему отправка этого конкретного POST не работает?

Ответы на вопрос(1)

Ваш ответ на вопрос