Создание календарного сервиса сверху Google Calendar

ОБНОВЛЕНИЕ: для rxjs> v5.5

Как упоминалось в некоторых комментариях и других ответах, по умолчанию HttpClient десериализует содержимое ответа в объект. Некоторые из его методов позволяют передавать аргумент универсального типа, чтобы утвердительно набрать результат. Вот почему больше нет json() метода.

import {throwError} from 'rxjs';
import {catchError, map} from 'rxjs/operators';

export interface Order {
  // Properties
}

interface ResponseOrders {
  results: Order[];
}

@Injectable()
export class FooService {
 ctor(private http: HttpClient){}

 fetch(startIndex: number, limit: number): Observable {
    let params = new HttpParams();
    params = params.set('startIndex',startIndex.toString()).set('limit',limit.toString());
    // base URL should not have ? in it at the en
    return this.http.get(this.baseUrl,{
       params
    }).pipe(
       map(res => res.results || []),
       catchError(error => _throwError(error.message || error))
    );
} 

Обратите внимание, что вы можете легко преобразовать возвращенный Observable в Promise, просто вызвав toPromise().

ОРИГИНАЛЬНЫЙ ОТВЕТ:

В вашем случае вы можете

Предполагая, что ваш бэкэнд возвращает что-то вроде:

{results: [{},{}]}

в формате JSON, где каждый {} является сериализованным объектом, вам потребуется следующее:

// Somewhere in your src folder

export interface Order {
  // Properties
}

import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';

import { Order } from 'somewhere_in_src';    

@Injectable()
export class FooService {
 ctor(private http: HttpClient){}

 fetch(startIndex: number, limit: number): Observable {
    let params = new HttpParams();
    params = params.set('startIndex',startIndex.toString()).set('limit',limit.toString());
    // base URL should not have ? in it at the en
    return this.http.get(this.baseUrl,{
       params
    })
    .map(res => res.results as Order[] || []); 
   // in case that the property results in the res POJO doesnt exist (res.results returns null) then return empty array ([])
  }
} 

Я удалил секцию catch, так как она может быть заархивирована через перехватчик HTTP. Проверьте документы . Например:

https://gist.github.com/jotatoledo/765c7f6d8a755613cafca97e83313b90

И чтобы потреблять, вам просто нужно назвать его как:

// In some component for example
this.fooService.fetch(...).subscribe(data => ...); // data is Order[]

9
задан Dinah 28 May 2009 в 14:44
поделиться

2 ответа

Вы хотите использовать № 2.

Используйте Google OpenID для аутентификации того, что они владеют определенной учетной записью Google. Используйте OpenAuth, чтобы получить разрешение на добавление и удаление событий.

Еще лучше - просто создайте событие календаря в своем приложении и откройте канал iCal. Таким образом, люди смогут использовать эти календари в любом количестве других приложений.

2
ответ дан 5 December 2019 в 01:19
поделиться

Ваша «нежелательная альтернатива № 2» не так уж нежелательна, поскольку Google поддерживает OpenID / OpenAuth протокол. Это означает, что пользователь может не только войти в вашу службу, используя учетные данные Google, но и предоставить вам разрешения на доступ к своему календарю Google.

Ни в коем случае вам не придется создавать учетные записи Google за кулисами. Для получения дополнительной информации проверьте открытые страницы Google

2
ответ дан 5 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: