A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de Postman 2020

Curso de Postman 2020

Eduardo 脕lvarez

Eduardo 脕lvarez

Llamados a un API con GET: llamado de listas y detalles de objetos

6/17
Recursos

Aportes 121

Preguntas 23

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Veo que muchos esta teniendo problemas porque no Funciona el API del curso, asi que comparto esta API donde pueden trabajar, bastante parecida a swapi pero esta es de otro curso bastante bueno, https://rickandmortyapi.com/api/character/
en esta es similar el comportamiento, en vez de course/ tienen character/
y al colocar el id al final de character podran visualizar el personaje que se trae.

espero les sirva y sigan aprendiendo. saludos.

Si se trata de mostrar el uso de Postman, definitivamente no deber铆a requerir correr nada localmente con tantas APIs gratuitas que hay en la red. Mal por ese detalle.

Este curso forma parte de la carrera de la carrera FrontEnd, pero aqu铆 lo tratan 煤nicamente como si fuera BackEnd. Yo descargu茅 los archivos y no tengo ni idea de qu茅 hacer con ellos. Creo que falt贸 la clase donde al menos explicaran como hacer uso de ellos, la configuraci贸n o c贸mo poner a correr el servidor. Primera vez que me pasa esto en un curso de Platzi, pero es lamentable.

Si no pueden consumir la api de platzi o levantar un servidor en local existen diversas apis interesantes.
Yo use una publica de pokemon:
https://pokeapi.co/

Saludosss

toco usar la API de STAR WARS

Me parece que a este curso le falta mucha informaci贸n al respecto de como iniciar鈥 =(

No funciona el repo ni los archivos para la base de datos, por favor Platzi Actualizarlo

Reto
Con GET obtenemos los datos en la respuesta de la solicitud, con HEAD solo nos dice si realmente la informaci贸n existe y la solicitud ser谩 correcta, no retorna informaci贸n, solo el estado de la petici贸n.

Se puede probar con el api de Rick and Morty y no tenemos que instalar nada, podemos hacer todos los get,

Ac谩 una lista de APIs p煤blicas:

https://github.com/public-apis/public-apis

En mi caso el servicio de postgres se apagaba inmediatamente (exited) para corregirlo modifiqu茅 el archivo docker-compose.yaml de la forma

 db:
    image: postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: "trust"

En este curso debieron darnos una URL de una API creada por Platzi o crear el curso usando una API publica como:

Pueden usar esta web para realizar pruebas de peticiones get con postman restcuntries.eu

Mi postman es tan raro

No esta bien que use para la clase un recurso local (aparentemente). Debi贸 indicar al menos como podemos obtener nosotros el mismo resultado ya sea mediante alguna herramienta. En mi caso lo mas similar que encontr茅 para continuar es la api de Star Wars: https://swapi.dev/

Diferencia entre GET y HEAD

**API: https://rickandmortyapi.com/ **

Verbo Get para traer recursos y detalles del recurso

Es un poco confuso al principio por lo del localhost, pueden usar la API de rick and morty

https://rickandmortyapi.com/documentation

Los recursos se encuentran en postman

HEAD = no muestra nada, es r谩pida y probablemente se use para verificar el funcionamiento o correcto manejo de la api en postman.
GET = devuelve los datos de la petici贸n realizada.

PD: El servidor local con docker funciono bien y sin problemas siguiendo las instrucciones dadas, eliminando sudo de los comandos en Windows y en powershell.

Para tener la API del profe, tenemos que hacer una configuraci贸n鈥i van a la secci贸n de Archivos y Enlaces y descargan el zip, hay un archivo README.md y dice lo siguiente:

Imagino que si seguimos los pasos tendremos la API del profe, intento y les digo como me fue jaja

Creo que se hace necesario incorporar un video donde se explique la configuraci贸n de la API de manera local ya que tuve dificultades para configurarla, anexo imagen de los pasos que segu铆 para poder tener resultados 贸ptimos

https://ibb.co/TKYfTBL

Aqui les dejo el paso a paso de como se instala en windows y soluciona a algunos errores

Pd. toco en PDF por que platzi no me deja poner enlaces de NOTION

con la api de rick y morty

Otra API que es muy f谩cil de implementar es la de STUDIO GHIBLI
https://ghibliapi.herokuapp.com/
Viene muy bien documentada y no requiere autenticaci贸n.
Espero les sirva.

Saludos!

Reto cumplido

con el verbo HEAD: No muestra nada, pero de igual manera se muestra el estado 200OK, es como para comprobar el correcto funcionamiento.

con el verbo GET: Nos devuelve los datos que le estamos solicitando en este caso los cursos.

La API a esta fecha FUNCIONA, segui los pasos de la clase anterior y todo OK.

Hice la tarea con la API de Rick & Morty. GET trae el documento JSON con toda la informaci贸n de la colecci贸n o el objeto鈥 HEAD en Postman no muestra nada, porque solo trae los headers鈥 Es necesario ir a la pesta帽a 鈥淗eaders鈥 para verlos (pero igual se pueden ver con una petici贸n GET).

Para practicar puedes utilizar
JsonPlaceholder son api p煤blicas

Un vistazo r谩pido de que es JSON y como se forma lo puedes encontrar aqui

https://www.json.org/json-es.html

Un objeto JSON
Un array JSON
Un valor JSON

La dos principales diferencias que encontr茅 en hacer las solicitudes con GET y HEAD fueron:

  • GET demora mas en llegar la respuesta ya que tiene todo el contenido
  • HEAD No trae nada de contenido y tiene una respuesta mas rapido para saber el estado de la API

Profesor nos puede pasar una web, donde est茅n listadas las mejores API鈥檚

Arreglen la API porfa

una pregunta para que el localhost:8000 funcione que toca descargar? ya descargue postman pero cunado escribo la ruta no me sale nada

Como estudiante me complicaron la Vida de este curso, por no tener conocimientos sobre Python鈥 si es verdad que no debemos parar de aprender pero nos metieron con Docker que ya de por si es Complejo.

igual agradecido con los Compa帽eros que me motivaron a seguir con otra API, para escusas Los pol铆ticos ! A seguir Aprendiendo.

un par de ayudas ya que muchos estan teniendo inconvenientes para correr la API local y viendo futuras clases es mucho mas enriquecedora la experiencia si se tiene funcionando asi que aqui van un para de aclaraciones para ubuntu
para installar docker recomiendo este link
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04
y docker-compose este
https://www.digitalocean.com/community/tutorials/como-instalar-docker-compose-en-ubuntu-20-04-es
si les pide virtualbox lo pueden instalar con
sudo apt install virtualbox
y si ademas les dice que Vxboxmanage no esta instalado deben activar la virtualizacion en sus computadores esto varia segun cada equipo pero si a pesar de googlearlo tienen dudas con gusto les puedo ayudar y con eso ya podrian correr el comando que se entrega en el readme.MD

No existe un API publica de Platzi para llevar este curso?

Intentar茅 usar la siguiente API
https://swapi.dev/people/1

驴Alguien logr贸 realizar peticiones a la API luego de seguir las indicaciones del README?

???I got confused

RETO:
GET, sirve para traer el body de la respuesta de una petici贸n, mientras que HEAD, indica que 煤nicamente queremos que se responda con los encabezados de la respuesta, y se ignore el cuerpo de datos, devolviendo tambi茅n el status code, tiempo de ejecuci贸n y el peso

Recomiendo el curso por el simple hecho, de aprender a manejar o usar las APIs. Tambi茅n, quiero recomendar (aquellos que quieran ver otras opciones) estos otros:

Terminen el curso (ayudar谩 mucho).

para los interesados en como consumir las api de pokemon o ryck and morty les comparto un link donde ense帽an como hacerlo https://www.youtube.com/watch?v=mkXLeXKE370

No encuentro el archivo de carga de datos me aparece el siguiente error

ProgrammingError at /api/courses/ relation "courses_course" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "courses_course" ^ Request Method: GET Request URL: http://127.0.0.1:8000/api/courses/ Django Version: 2.2.7 Python Executable: /usr/local/bin/python Python Version: 3.6.11 Python Path: ['/code', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages'] Server time: Tue, 18 Aug 2020 00:49:49 +0000 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'django_extensions', 'courses'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 84. return self.cursor.execute(sql, params) The above exception (relation "courses_course" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "courses_course" ^ ) was the direct cause of the following exception: File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner 34. response = get_response(request) File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 115. response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 113. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view 54. return view_func(*args, **kwargs) File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py" in view 114. return self.dispatch(request, *args, **kwargs) File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch 505. response = self.handle_exception(exc) File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception 465. self.raise_uncaught_exception(exc) File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in raise_uncaught_exception 476. raise exc File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch 502. response = handler(request, *args, **kwargs) File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py" in list 40. page = self.paginate_queryset(queryset) File "/usr/local/lib/python3.6/site-packages/rest_framework/generics.py" in paginate_queryset 171. return self.paginator.paginate_queryset(queryset, self.request, view=self) File "/usr/local/lib/python3.6/site-packages/rest_framework/pagination.py" in paginate_queryset 206. self.page = paginator.page(page_number) File "/usr/local/lib/python3.6/site-packages/django/core/paginator.py" in page 70. number = self.validate_number(number) File "/usr/local/lib/python3.6/site-packages/django/core/paginator.py" in validate_number 48. if number > self.num_pages: File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py" in __get__ 80. res = instance.__dict__[self.name] = self.func(instance) File "/usr/local/lib/python3.6/site-packages/django/core/paginator.py" in num_pages 97. if self.count == 0 and not self.allow_empty_first_page: File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py" in __get__ 80. res = instance.__dict__[self.name] = self.func(instance) File "/usr/local/lib/python3.6/site-packages/django/core/paginator.py" in count 91. return c() File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py" in count 392. return self.query.get_count(using=self.db) File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/query.py" in get_count 504. number = obj.get_aggregation(using, ['__count'])['__count'] File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/query.py" in get_aggregation 489. result = compiler.execute_sql(SINGLE) File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql 1100. cursor.execute(sql, params) File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute 99. return super().execute(sql, params) File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute 67. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute_with_wrappers 76. return executor(sql, params, many, context) File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 84. return self.cursor.execute(sql, params) File "/usr/local/lib/python3.6/site-packages/django/db/utils.py" in __exit__ 89. raise dj_exc_value.with_traceback(traceback) from exc_value File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 84. return self.cursor.execute(sql, params) Exception Type: ProgrammingError at /api/courses/ Exception Value: relation "courses_course" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "courses_course" ^ Request information: USER: AnonymousUser GET: No GET data POST: No POST data FILES: No FILES data COOKIES: csrftoken = 'Q9sCcq2f28OZ0zU9ILtBJuDMx9LpccxK' META: CONTENT_LENGTH = '' CONTENT_TYPE = 'text/plain' CSRF_COOKIE = '2ya7nNiY7A5qdovL9AkHk622JeC9nRytIxszp3a3ZyJf3NfKHbD8TqvE6ddopTV3' DJANGO_SETTINGS_MODULE = 'composeexample.settings' GATEWAY_INTERFACE = 'CGI/1.1' GPG_KEY = '0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D' HOME = '/root' HOSTNAME = '40356dfd9c03' HTTP_ACCEPT = '*/*' HTTP_ACCEPT_ENCODING = 'gzip, deflate, br' HTTP_CONNECTION = 'keep-alive' HTTP_COOKIE = 'csrftoken=Q9sCcq2f28OZ0zU9ILtBJuDMx9LpccxK' HTTP_HOST = '127.0.0.1:8000' HTTP_POSTMAN_TOKEN = 'a660f28a-130d-49f7-91b0-14b9b07e8b0d' HTTP_USER_AGENT = 'PostmanRuntime/7.26.3' LANG = 'C.UTF-8' PATH = '/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' PATH_INFO = '/api/courses/' PYTHONUNBUFFERED = '1' PYTHON_GET_PIP_SHA256 = 'd4d62a0850fe0c2e6325b2cc20d818c580563de5a2038f917e3cb0e25280b4d1' PYTHON_GET_PIP_URL = 'https://github.com/pypa/get-pip/raw/5578af97f8b2b466f4cdbebe18a3ba2d48ad1434/get-pip.py' PYTHON_PIP_VERSION = '20.2.2' PYTHON_VERSION = '3.6.11' QUERY_STRING = '' REMOTE_ADDR = '192.168.64.1' REMOTE_HOST = '' REQUEST_METHOD = 'GET' RUN_MAIN = 'true' SCRIPT_NAME = '' SERVER_NAME = '40356dfd9c03' SERVER_PORT = '8000' SERVER_PROTOCOL = 'HTTP/1.1' SERVER_SOFTWARE = 'WSGIServer/0.2' TZ = 'UTC' wsgi.errors = <_io.TextIOWrapper name='' mode='w' encoding='UTF-8'> wsgi.file_wrapper = '' wsgi.input = wsgi.multiprocess = False wsgi.multithread = True wsgi.run_once = False wsgi.url_scheme = 'http' wsgi.version = '(1, 0)' Settings: Using settings module composeexample.settings ABSOLUTE_URL_OVERRIDES = {} ADMINS = [] ALLOWED_HOSTS = ['0.0.0.0', 'localhost', '127.0.0.1'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] AUTH_PASSWORD_VALIDATORS = '********************' AUTH_USER_MODEL = 'auth.User' BASE_DIR = '/code' CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_KEY_PREFIX = '********************' CACHE_MIDDLEWARE_SECONDS = 600 CSRF_COOKIE_AGE = 31449600 CSRF_COOKIE_DOMAIN = None CSRF_COOKIE_HTTPONLY = False CSRF_COOKIE_NAME = 'csrftoken' CSRF_COOKIE_PATH = '/' CSRF_COOKIE_SAMESITE = 'Lax' CSRF_COOKIE_SECURE = False CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure' CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' CSRF_TRUSTED_ORIGINS = [] CSRF_USE_SESSIONS = False DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': '********************', 'HOST': 'db', 'PORT': 5432, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P' DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y' DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = True DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.' DEFAULT_CHARSET = 'utf-8' DEFAULT_CONTENT_TYPE = 'text/html' DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' DEFAULT_FROM_EMAIL = '[email protected]' DEFAULT_INDEX_TABLESPACE = '' DEFAULT_TABLESPACE = '' DISALLOWED_USER_AGENTS = [] EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'localhost' EMAIL_HOST_PASSWORD = '********************' EMAIL_HOST_USER = '' EMAIL_PORT = 25 EMAIL_SSL_CERTFILE = None EMAIL_SSL_KEYFILE = '********************' EMAIL_SUBJECT_PREFIX = '[Django] ' EMAIL_TIMEOUT = None EMAIL_USE_LOCALTIME = False EMAIL_USE_SSL = False EMAIL_USE_TLS = False FILE_CHARSET = 'utf-8' FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 FILE_UPLOAD_PERMISSIONS = None FILE_UPLOAD_TEMP_DIR = None FIRST_DAY_OF_WEEK = 0 FIXTURE_DIRS = [] FORCE_SCRIPT_NAME = None FORMAT_MODULE_PATH = None FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' IGNORABLE_404_URLS = [] INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'django_extensions', 'courses'] INTERNAL_IPS = [] LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokm氓l'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us' LANGUAGE_COOKIE_AGE = None LANGUAGE_COOKIE_DOMAIN = None LANGUAGE_COOKIE_NAME = 'django_language' LANGUAGE_COOKIE_PATH = '/' LOCALE_PATHS = [] LOGGING = {} LOGGING_CONFIG = 'logging.config.dictConfig' LOGIN_REDIRECT_URL = '/accounts/profile/' LOGIN_URL = '/accounts/login/' LOGOUT_REDIRECT_URL = None MANAGERS = [] MEDIA_ROOT = '/media/' MEDIA_URL = '/media/' MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] MIGRATION_MODULES = {} MONTH_DAY_FORMAT = 'F j' NUMBER_GROUPING = 0 PASSWORD_HASHERS = '********************' PASSWORD_RESET_TIMEOUT_DAYS = '********************' PREPEND_WWW = False REPOSITORY_ROOT = '/' REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10} ROOT_URLCONF = 'composeexample.urls' SECRET_KEY = '********************' SECURE_BROWSER_XSS_FILTER = False SECURE_CONTENT_TYPE_NOSNIFF = False SECURE_HSTS_INCLUDE_SUBDOMAINS = False SECURE_HSTS_PRELOAD = False SECURE_HSTS_SECONDS = 0 SECURE_PROXY_SSL_HEADER = None SECURE_REDIRECT_EXEMPT = [] SECURE_SSL_HOST = None SECURE_SSL_REDIRECT = False SERVER_EMAIL = '[email protected]' SESSION_CACHE_ALIAS = 'default' SESSION_COOKIE_AGE = 1209600 SESSION_COOKIE_DOMAIN = None SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_NAME = 'sessionid' SESSION_COOKIE_PATH = '/' SESSION_COOKIE_SAMESITE = 'Lax' SESSION_COOKIE_SECURE = False SESSION_ENGINE = 'django.contrib.sessions.backends.db' SESSION_EXPIRE_AT_BROWSER_CLOSE = False SESSION_FILE_PATH = None SESSION_SAVE_EVERY_REQUEST = False SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' SETTINGS_MODULE = 'composeexample.settings' SHORT_DATETIME_FORMAT = 'm/d/Y P' SHORT_DATE_FORMAT = 'm/d/Y' SIGNING_BACKEND = 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS = [] STATICFILES_DIRS = [] STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' STATIC_ROOT = '/static/' STATIC_URL = '/static/' TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] TEST_NON_SERIALIZED_APPS = [] TEST_RUNNER = 'django.test.runner.DiscoverRunner' THOUSAND_SEPARATOR = ',' TIME_FORMAT = 'P' TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_THOUSAND_SEPARATOR = False USE_TZ = True USE_X_FORWARDED_HOST = False USE_X_FORWARDED_PORT = False WSGI_APPLICATION = 'composeexample.wsgi.application' X_FRAME_OPTIONS = 'SAMEORIGIN' YEAR_MONTH_FORMAT = 'F Y' You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.

Lers dejo los comando ejecutados dentro el contendor, me corrio sin problemas.

Hasta este punto, no me ha gustado este curso, la explicacion es deficiente, el profesor da por obvias muchas cosas sobre todo muy mal el tema de la api local con doker, este curso se debio haber explicado sobre una api p煤blica. Si unico que los salva son los comentarios y recomendaciones de los compa帽eros.

logr茅 levantar la API, pero sinceramente me llevo tiempo en hacerlo, porque no tengo conocimientos en Docker

Reto cumplido. Adjunto las respuestas obtenidas con el comando 鈥渃url -I鈥 (i latina may煤scula, para especificar el m茅todo GET).
Como se ve en la imagen, adem谩s de lo que se conoce del header, tambi茅n se muestran dos datos importantes:

  • los m茅todos permitidos para con dicho endpoint
  • el content length

Cabe aclarar que para correr la api local toca ejecutar en la parpeta proyecto

 docker-compose up -d

luego ahi si vamos a postman a verificar que funciona

驴Como s茅 que al poner /1/ me traer谩 el curso 1, si el objeto tiene varias propiedades como title, description, etc ?

https://rickandmortyapi.com/api/location/1

ESTOY USANDO ESA URL SIN PROBLEMAS

Hola,
Pude levantar la api docker-compose.
A m铆 me funciono localmente, ya que inicialmente me present贸 el error de que no estaba permitido el host, por tal motivo procedi a realizar un cambio en el siguiente archivo:
diretorio composeexample archivo settings
En el mismo agregue los hosts que requiere acceder al api, esto en la siguiente linea:

<code ALLOWED_HOSTS = ['localhost','127.0.0.1' ]> 

5. Llamados a un API con GET: llamado de listas y detalles de objeto

Para empezar a usar postman en esta 煤ltima versi贸n, primero se debe crear un workspaces se introducen los datos que se piden.

verbo url Respuesta
GET http : // localhost: 8000/api/courses/ Muestra todos los cursos
GET http : // localhost: 8000/api/courses/1 Muestra un curso particular, en este caso el 1
GET http : // localhost: 8000/api/materials/ Error 405, Metodo no permitido, No se puede mostrar toda la lista de materiales sin contexto
GET http : // localhost: 8000/api/materials/1 Muestra los materiales del video uno
GET http : // localhost: 8000/api/comments/ Error 401, no tiene autorizaci贸n
GET http : // localhost: 8000/api/comments/1 Error 401, no tiene autorizaci贸n
GET http : // localhost: 8000/api/comments/1/like Error 401, no tiene autorizaci贸n
GET http : // localhost: 8000/api/comments/1/dislike Error 401, no tiene autorizaci贸n

Si est谩n teniendo problemas con la api aqui hice un tutorial y lo p煤blicque en stackoverflow ya que aqui en platzi no me dejan publicar los link

https://es.stackoverflow.com/questions/460434/docker-error-could-not-translate-host-name-db-to-address-temporary-failure-i/460722#460722

El tema platzi actulizo el c贸digo pero no lo ha subido a la plataforma

Para los que tienen problemas de autenticaci贸n! Tienen que entrar al container de docker, a la carpeta project. Desde ahi, ejecutar el comando que realiza las migraciones. Para luego, ejecutar el comando que les permite establecer un usuario y una contrase帽a.

python manage.py migrate
python manage.py createsuperuser  

Ahi es donde van a poder setear user y password y no deberian tener problemas con las peticiones a la API de courses

corazon a este comentario si haz intentado hacer este curso varia veces T_T

Probe el API desde Ubuntu 20.04 y hasta los momentos con este sistema operativo todo esta funcionando super bien. Si deseas que te ayude solo responde este comentario y hablos.

El method head me da error. creo que dice parser error en consola

Tengo una duda, al profesor le llegan los detalles de la api en cuesti贸n de 16 o 17 milisegundos, a mi me llegan en 44 o hasta 84 milisegundos 驴de qu茅 depende eso? 驴c贸mo puedo mejorar el tiempo de respuesta? 驴depende de mi internet? o hay algo m谩s?

Cuando hacemos head, es un get que solo visualiza las cabeceras de la peticion, por ende debemos ver en las opciones de Headers

  • PUT = Te entrega tanto la cabecera de la peticion como el cuerpo (HEAD + BODY)
  • HEAD = Te entrega exclusivamente la cabecera de la peticion

Muchachos les recomiendo usar otras APIs gratuitas que permitan hacer CRUD, no complicarse, no tiene mucha l贸gica que intenten ense帽ar con un API local cuando la instalaci贸n puede variar de acuerdo a versiones que est茅n utilizando, fallo de Platzi, ser铆a mejor si los cursos lo hacen con herramientas que no den problemas de acuerdo a versiones.

Donde puedo descargar la API de ejemplo de Platzi ?

podriamos centrarnos mas en el uso de la herramienta y no tanto en el json.

El problema es que al cargar la API del repositorio el contenedor de la base de datos se ejecuta y queda exited, quien haya podido dejarlo up comparta por favor la soluci贸n.

En el curso de fundamentos de Javascript, nos proponen la de Star Wars: https://swapi.dev/

Otro curso que me desmotivo.

Esta de los v铆deos de Leonidas :https://pokeapi.co/ (pokemon)

Hola buenas tardes, eh logrado instalar docker y ejecutar todos los comandos correctamente .

[email protected]:/code# python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, authtoken, contenttypes, courses, sessions
Running migrations:
Applying contenttypes.0001_initial鈥 OK
Applying auth.0001_initial鈥 OK
Applying admin.0001_initial鈥 OK
Applying admin.0002_logentry_remove_auto_add鈥 OK
Applying admin.0003_logentry_add_action_flag_choices鈥 OK
Applying contenttypes.0002_remove_content_type_name鈥 OK
Applying auth.0002_alter_permission_name_max_length鈥 OK
Applying auth.0003_alter_user_email_max_length鈥 OK
Applying auth.0004_alter_user_username_opts鈥 OK
Applying auth.0005_alter_user_last_login_null鈥 OK
Applying auth.0006_require_contenttypes_0002鈥 OK
Applying auth.0007_alter_validators_add_error_messages鈥 OK
Applying auth.0008_alter_user_username_max_length鈥 OK
Applying auth.0009_alter_user_last_name_max_length鈥 OK
Applying auth.0010_alter_group_name_max_length鈥 OK
Applying auth.0011_update_proxy_permissions鈥 OK
Applying authtoken.0001_initial鈥 OK
Applying authtoken.0002_auto_20160226_1747鈥 OK
Applying courses.0001_initial鈥 OK
Applying courses.0002_video鈥 OK
Applying courses.0003_course_ranking鈥 OK
Applying courses.0004_comment鈥 OK
Applying courses.0005_comment_likes鈥 OK
Applying courses.0006_course_badge鈥 OK
Applying sessions.0001_initial鈥 OK
[email protected]:/code# source admin_info.sh
Generated token 9eb202378e07376b23d7b4988bc1be258df0652e for user superadmin
[email protected]:/code# python manage.py runscript migrations.admin_migration

Segun el estatus todo salio correctamente, pero cuando ingreso a la direccion
127.0.0.0:8000/api/sources/
no me carga los datos, podrian indicarme si me falta hacer algo por favor.

Cuando hacemos la petici贸n con GET retorna los datos.
Cuando hacemos la petici贸n con HEAD no retorna ning煤n dato.

Me sale esto Error: No such container: postman-course_web_1

Necesito ayuda, no puedo ejecutar en paso 4 del README: source admin_info.sh
Me aparece lo siguiente:

Siento que me pierdo por no haber cursado los otros cursos de creador de APIS.

Segu铆 el README.md y no me funciono 鈥 intente arreglar los fallos que me sal铆an como:

  • could not translate host name 鈥渄b鈥 to address: Temporary failure in name resolution:
    este fallo lo arregle agregandole al docker-compose.yaml
    environment:
    - 鈥淧OSTGRES_HOST_AUTH_METHOD=trust鈥

Pero posterior a esto me sigue apareciendo este error

Buena clase, yo us茅 el API https://swapi.dev/api/people/:id

Pero hubiera sido bueno usar la misma API, es decir, sin tener que correrla en local

Hola, estoy instalando la API sin embargo al crear el contenedor postman-couse_web_1 marca errores y no puedo avanzar.

Ejecuto Docker Desktop 2.1.0.5 (40693) en una pc win10.
Esto es lo que se obtiene en la consola:

位 docker-compose up -d
postman-course_db_1 is up-to-date
Creating postman-course_web_1 鈥 error

ERROR: for postman-course_web_1 Cannot create container for service web: b鈥橠rive sharing failed for an unknown reason鈥

ERROR: for web Cannot create container for service web: b鈥橠rive sharing failed for an unknown reason鈥
ERROR: Encountered errors while bringing up the project.

Alguien ha solucionado este error?
Saludos

En vista de que hay muchos que tienen problmas les dejo la lista de APIs gratuita:
Public APIs
https://github.com/public-apis/public-apis

disculpa ese localhost estas apuntando a tu propia maquina ?? no se entiende puede ser mas claro o brinda una ruta para hacer pruebas?

Al parecer cuando se hace la consulta por GET muestra toda la informaci贸n del Body y de los Headers. Con HEAD solo trae la informaci贸n de los Headers.

La diferencia entre GET y HEAD es que usando HEAD la API no respondera un cuerpo (body)

ese ejemplo que el profesor compartio sirve para seguirlo en el ejemplo de clase que esta explicando?

Holas, estoy usando esta API: https://rickandmortyapi.com/api/
pero 驴C贸mo puedo hacer para mostrar el origen del personaje con ID: 2?, he intentado de varias formas como las que muestro pero me muestra error, si alguien me da la mano para entender, gracias.



con HEAD no me reegresa nada XD

me perd铆, pero gracias a los comentarios ya pude continuar.

ummm no termine de entender esto 馃槙 principalmente la parte de Docker

GET

Aun no he completado el curso, pero creo la mayor铆a lo logro sin tener que levantar el servidor, aqui tengo una lista con API麓s publicas que podemos utilizar
https://github.com/public-apis/public-apis

Si tienen problemas para desplegar la api de porque su pc no soporta docker como a mi, pueden usar esta api https://www.themoviedb.org/documentation/api?language=es es de pel铆culas y ah铆 est谩 toda la documentaci贸n para usarla.

.______.

Aqui les dejo el paso a paso de como se instala en windows y soluciona a algunos errores

Pd. toco en PDF por que platzi no me deja poner enlaces de NOTION

HEAD no retorna datos en si, es para consultar las cabeceras de una url.
HEAD

Me cost贸 correr el API per ahora conozco algo de Docker xd

Gracias por ajustar el Api

Ideas claves
Postman para hacer peticiones a un API
Un endpoint es utilizado para traer informaci贸n
Verbo GET para traer datos

Notas de la Clase
El verbo por defecto es GET, se puede crear o importar una colecci贸n, o simplemente hacer un request.
Podemos utilizar varios verbos de una lista desplegable, especificamos la URL y validamos que el verbo.
Siempre al efectuar una petici贸n podemos ver el estado de la petici贸n (est谩 en el header HTTP) y una descripci贸n,
adem谩s de esto tenemos el tiempo de respuesta del servidor y cuento pesa la respuesta.

Postman nos da diferentes opciones para visualizar la respuesta, entre ellas la m谩s usada es Pretty (esto es al gusto del consumidor).
Podemos minimizar o maximizar la respuesta, tanto para formato JSON o XML

Resumen
Posman es una herramienta con el cual podemos hacer diferentes peticiones aun API, esto tambi茅n lo podemos hacer desde la terminal
pero la interfaz de Postman hace que realizar un request sea muy intuitivo, adem谩s que nos da la posibilidad de compartir una colecci贸n que request
o trabar en equipo para crear request. Podemos ver la informaci贸n m谩s organizada y adem谩s de esto jugar con la visualizaci贸n de la response.

Con el verbo GET podemos traer toda la informaci贸n de una colecci贸n, o tambi茅n ver solo un recurso con solo enviar el id.

Switch to dark theme en postman.

  1. en la esquina superior izquierda, click a help y asegurate de tener la 煤ltima versi贸n.
  2. en la esquina superior derecha, click al engranaje de configuraci贸n
  3. ve a themes y escoje el lado oscuro del development como tu padre鈥 O permanece en el lado brillante de la juerza.
    Aca tienes un ejemplo audiovisual

Tiene sentido lo que se comenta, siguiendo las instrucciones logre correr la api, el problema es que lo hice todo a ciegas, comprendo conceptos de API, y servidores en local y demas pero algunos pasos sin sustento, yo se que mas adelante se logran esos conceptos pero para fines del curso nos ponen en dilema.


Get nos traer la petici贸n con HEAD podemos ver el status. Es decir si la solicitud es posible.