Как напимер работать с api вконтакте или другими сервисами использующими Basik Autentification?

Добрый день!

Вопрос по работе с api через spring boot java, возможно это покажется глупо но все же, у меня пазл в голове пока не может правильно построиться.
Есть вот такое описание получения токена авторизации:

Bearer Token

Generates a bearer token from the client key and client secret using Basic Authorization using the api client key and api client secret.
Your client key and client secret must be presented using Basic Authorization where the header is:
        
Authorization: Basic {Base-64 encode of:[Your Api Client Key]:[Your Api Client Secret]}
//EXAMPLE:    Authorization: Basic ZXdocVVHWWNM....IZjBKdjRrMUlHRFpNWVRMZG

See https://tools.ietf.org/html/rfc7617 for more details on Basic Authorization. This token WILL EXPIRE, after which a new bearer token will need to be obtained. This token must be presented in future requests in the form of a Authorization: Bearer header.
All future requests must use Bearer Authorization where the header is:
        
Authorization: Bearer {Bearer Token}
//EXAMPLE:    Authorization: Bearer eyxCbGciOiJIUzI1Nis...5xywLoYVqTcXDexbC8

Once the bearer token expires, you will have to use Basic Authorization again to obtain a new bearer token. See https://tools.ietf.org/html/rfc6750 for more details on Bearer Tokens.

Server URL:
/api/Authentication
Ответ:
{

    "bearer_token": "eyxCbGciOiJIUzI1Nis...5xywLoYVqTcXDexbC8",
    "expiration": "2018-05-01T15:20:22Z",
    "ticks": 636607848220000000

}

Ну и к примеру реализация GET запроса к api, причем в запросе нужно учесть полученный токен при авторизации.

Server URL:
/api/Rentals
Ответ:
[
  {
    "rentalId": "fe9cd4ce-47cb-40fb-850e-8f41d238ada0",
    "timeRemaining": "13.21:59:02.0523196",
    "expiration": "2019-07-22T23:47:15Z",
    "maxRentalLifetime": "2019-09-01T12:45:00Z",
    "recurringCost": 90,
    "autoRenew": true,
    "emailReminder": true,
    "rentalTargets": [
      {
        "targetId": 3,
        "name": "Airbnb",
        "dailyFreeQuota": 0,
        "number": "9876543210"
      },
      {
        "targetId": 33,
        "name": "Google",
        "dailyFreeQuota": 5,
        "number": "9876543210"
      }
    ]
  },
  {
    "rentalId": "98c6ba2e-ee43-4ce8-a92f-a088a615fcc3",
    "timeRemaining": "6.23:37:56.1791903",
    "expiration": "2019-07-16T05:55:56Z",
    "maxRentalLifetime": "2019-08-22T20:27:00Z",
    "recurringCost": 60,
    "autoRenew": false,
    "emailReminder": true,
    "rentalTargets": [
      {
        "targetId": 72,
        "name": "Tinder",
        "dailyFreeQuota": 5,
        "number": "8765432109"
      }
    ]
  }
]


Как мне организовать работу со Spring boot с api, помню на php собирал через curl запросы и слал их на сервер получал ответы разбирал и улыбался, тут что то я понять не могу толи я дурак, толи лыжи не едут..

Если есть у кого пример подобной работы или что почитать конкретнее подсказать, насколько я понимаю нужно работать с rest full, но пока у меня не получается ни где зацепиться что бы копать дальше.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!
Для работы с API других сайтов вы можете использовать RestTemplate.
В статье описано, как с ним работать. Как слать POST GET и др. запросы. Как получать ответы и как этот ответ разобрать в pojo
https://www.baeldung.com/rest-template

Вот, например, реализованный метод для получения статуса сервиса hotelbeds
public HttpStatus getStatus() {
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity httpEntity = new HttpEntity(hotelbedsAuth.hotelsAuth());
        ResponseEntity<String> response = restTemplate.exchange(
                hotelbedsProperties.getHotelBaseUrl()+"/status", HttpMethod.GET, httpEntity, String.class);
        return response.getStatusCode();
}

В общем, прочитайте про RestTemplate.

Once the bearer token expires, you will have to use Basic Authorization again to obtain a new bearer token.

Тут вы можете использовать CRON или аннотацию @Scheduled, чтобы по крону в заданный интервал времени запускать метод по обновлению токена

https://www.baeldung.com/spring-scheduled-tasks
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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