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…si 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 “Headers” 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’s

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 “curl -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 “db” to address: Temporary failure in name resolution:
    este fallo lo arregle agregandole al docker-compose.yaml
    environment:
    - “POSTGRES_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’Drive sharing failed for an unknown reason’

ERROR: for web Cannot create container for service web: b’Drive 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.