Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

REST API - teoria i praktyka - WordUp Warszawa

518 views

Published on

Prezentacja traktująca o praktycznych i teoretycznych aspektach wykorzystania REST API w swoich projektach.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

REST API - teoria i praktyka - WordUp Warszawa

  1. 1. REST API 
 teoria i praktyka Tomasz Dziuda WordUp Warszawa 27.09.2017
  2. 2. Tak miało być...
  3. 3. {JSON}{JSO N } {JSON} {JSO N } {JSO N } {JSO N } {JSO N } {JSO N } {JSO N } {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON}
  4. 4. a z reguły jest...
  5. 5. Co poszło nie tak?
  6. 6. add_filter('rest_enabled', '__return_false'); add_filter('rest_jsonp_enabled', '__return_false'); Security Checklist
  7. 7. Jeżeli projektujesz rozwiązanie dla mas... nie licz na REST API
  8. 8. Jeżeli projektujesz rozwiązanie dla mas... nie licz na REST API
  9. 9. Jednak wciąż możesz wykorzystać REST API na wiele ciekawych sposobów...
  10. 10. Zanim użyjesz REST API...
  11. 11. Włącz HTTPS
  12. 12. Źródło: https://blog.chromium.org/2017/04/next-steps-toward-more-connection.html
  13. 13. Źródło: https://jwt.io/
  14. 14. Uzyskiwanie tokena
  15. 15. Wysyłamy zapytaniem POST do endpointa /wp-json/jwt-auth/v1/token 
 login i hasło użytkownika, którego chcemy autoryzować: { username: 'admin', password: 'password' } Uzyskiwanie tokena
  16. 16. Wysyłamy zapytaniem POST do endpointa /wp-json/jwt-auth/v1/token 
 login i hasło użytkownika, którego chcemy autoryzować: { username: 'admin', password: 'password' } { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ...", "user_display_name": "admin", "user_email": "admin@localhost.dev", "user_nicename": "admin" } Gdy dane są poprawne otrzymujemy token i dane użytkownika: Uzyskiwanie tokena
  17. 17. Do każdego zapytania wymagającego 
 autoryzacji dodajemy nagłówek: Authorization: Bearer WARTOŚĆ_TOKENA
  18. 18. Wymuś autoryzację klientów
  19. 19. Publiczne API to...
  20. 20. Brak kontroli nad dostępem do danych
  21. 21. Ryzyko wycieku danych
  22. 22. Możliwość określenia wersji WordPressa
  23. 23. Karmienie botów informacjami
  24. 24. Zwiększone zużycie zasobów serwera
  25. 25. Jak ograniczyć dostęp?
  26. 26. Jak ograniczyć dostęp? 1) https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked- questions/#can-i-disable-the-rest-api 2) https://gist.github.com/ccurtin/8982d51b6cafa5864fe25884b1fe5a25 3) https://wordpress.stackexchange.com/questions/150207/wordpress-json-api- restrict-to-specific-domain
  27. 27. Jak ograniczyć dostęp? Całkowite wyłączenie REST API może w przyszłości skutkować problemy z działaniem niektórych funkcji kokpitu
  28. 28. Niektóre wtyczki nie będą działać po wyłączeniu REST API
  29. 29. Pamiętaj o CORS
  30. 30. Pamiętaj o CORS Cross-Origin Resource Sharing
  31. 31. Pamiętaj o CORS Cross-Origin Resource Sharing
  32. 32. function dziudek_rest_api_allow_all_cors() { remove_filter('rest_pre_serve_request', 'rest_send_cors_headers'); add_filter('rest_pre_serve_request', function($value) { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE'); header('Access-Control-Allow-Credentials: true'); return $value; }); } add_action('rest_api_init', 'dziudek_rest_api_allow_all_cors', 20); Pamiętaj o CORS
  33. 33. Użyj JSONP http://dziudek.pl/wp-json/wp/v2/posts?_jsonp=parseData /**/receiveData( { code: "rest_not_logged_in", message: "You are not currently logged in.", data: 
 { status: 401 } } )
  34. 34. Użyj JSONP http://dziudek.pl/wp-json/wp/v2/posts?_jsonp=parseData /**/receiveData( { code: "rest_not_logged_in", message: "You are not currently logged in.", data: 
 { status: 401 } } )
  35. 35. Użyj JSONP http://dziudek.pl/wp-json/wp/v2/posts?_jsonp=parseData /**/parseData( { code: "rest_not_logged_in", message: "You are not currently logged in.", data: 
 { status: 401 } } )
  36. 36. Nie psuj REST API
  37. 37. Nie psuj REST API 1. Unikaj modyfikowania domyślnych pól endpointów 2. W razie potrzeby dodawaj brakujące dane jako nowe pola... 3. ... lub twórz własne endpointy 4. Staraj się nie modyfikować domyślnych parametrów REST API (np. maksymalny rozmiar odpowiedzi)
  38. 38. Nie psuj REST API 1. Unikaj modyfikowania domyślnych pól endpointów 2. W razie potrzeby dodawaj brakujące dane jako nowe pola... 3. ... lub twórz własne endpointy 4. Staraj się nie modyfikować domyślnych parametrów REST API (np. maksymalny rozmiar odpowiedzi)
  39. 39. Nie psuj REST API 1. Unikaj modyfikowania domyślnych pól endpointów 2. W razie potrzeby dodawaj brakujące dane jako nowe pola... 3. ... lub twórz własne endpointy 4. Staraj się nie modyfikować domyślnych parametrów REST API (np. maksymalny rozmiar odpowiedzi)
  40. 40. Nie psuj REST API 1. Unikaj modyfikowania domyślnych pól endpointów 2. W razie potrzeby dodawaj brakujące dane jako nowe pola... 3. ... lub twórz własne endpointy 4. Staraj się nie modyfikować domyślnych parametrów REST API (np. maksymalny rozmiar odpowiedzi)
  41. 41. Wyposaż się w narzędzia
  42. 42. Postman Źródło: https://www.getpostman.com/
  43. 43. 4 przepisy na wykorzystanie REST API
  44. 44. 1. Wymiana treści między stronami
  45. 45. XML jest passé
  46. 46. XML jest passé • JSON można łatwiej obsłużyć z poziomu klienta • Nie zawsze musimy się martwić o CORS (JSONP) • Nie musimy angażować kodu PHP
  47. 47. XML jest passé • JSON można łatwiej obsłużyć z poziomu klienta • Nie zawsze musimy się martwić o CORS (JSONP) • Nie musimy angażować kodu PHP
  48. 48. XML jest passé • JSON można łatwiej obsłużyć z poziomu klienta • Nie zawsze musimy się martwić o CORS (JSONP) • Szybsze ładowanie się strony (swoisty lazy load danych)
  49. 49. JSON Feed Źródło: https://jsonfeed.org/
  50. 50. 2. Eksport/import danych
  51. 51. Choć nie zawsze
  52. 52. Źródło: https://getpublii.com
  53. 53. Choć nie zawsze • REST API może być wyłączone • By mieć pełny dostęp do danych trzeba się autoryzować, a Publii jest aplikacją desktopową, zatem użytkownik musiałby zainstalować dodatkowy plugin autoryzujący (np. poprzez JWT)
  54. 54. Choć nie zawsze • REST API może być wyłączone • By mieć pełny dostęp do danych trzeba się autoryzować, a Publii jest aplikacją desktopową, zatem użytkownik musiałby zainstalować dodatkowy plugin autoryzujący (np. poprzez JWT)
  55. 55. 3. WordPress jako headless CMS
  56. 56. Źródło: https://www.contentful.com/
  57. 57. {JSON}{JSO N } {JSON} {JSO N } {JSO N } {JSO N } {JSO N } {JSO N } {JSO N } {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON} {JSON}
  58. 58. Źródło: https://www.slideshare.net/dziudek/electron-wordpress
  59. 59. Źródło: https://ma.tt/2017/09/on-react-and-wordpress/
  60. 60. Źródło: https://code.facebook.com/posts/300798627056246/relicensing-react-jest-flow-and-immutable-js/
  61. 61. Autoryzacja Cookies we wszystkich wypadkach poza motywem SPA nie zadziałają. Rozważ inne formy autoryzacji np. JWT
  62. 62. 4. Sprawdzenie wiedzy publiki o WordPressie ;-)
  63. 63. Podsumujmy
  64. 64. Pamiętaj o:
  65. 65. Pamiętaj o:
  66. 66. Pamiętaj o:
  67. 67. Stosować REST API czy nie?
  68. 68. Realizujesz projekt dla konkretnego klienta Stosować REST API czy nie?
  69. 69. Realizujesz projekt dla konkretnego klienta Tworzysz ogólnodostępną wtyczkę bazującą na REST API Stosować REST API czy nie?
  70. 70. Stosować REST API czy nie?
  71. 71. Szukasz gotowego, łatwo rozszerzalnego back-endu dla swojej aplikacji Stosować REST API czy nie?
  72. 72. Szukasz gotowego, łatwo rozszerzalnego back-endu dla swojej aplikacji Wyłącz publiczny dostęp do REST API jeśli go nie używasz Stosować REST API czy nie?
  73. 73. Stosować REST API czy nie?
  74. 74. Nie potrzebujesz dostępu do REST API na stronach na które nie masz wpływu Stosować REST API czy nie?
  75. 75. Nie potrzebujesz dostępu do REST API na stronach na które nie masz wpływu Chcesz stworzyć usługę bazującą na tym, że REST API jest włączone Stosować REST API czy nie?
  76. 76. Pytania?
  77. 77. tomasz@dziuda.com @dziudek http://dziudek.pl http://www.slideshare.net/dziudek Tomasz Dziuda

×