JS Core III

❓ What are the four questions we ask ourselves in the Debugging Framework?

 

❓ What are three tools we could use to debug our programs?

 

❓ What is a syntax error?

 

❓ What is a reference error?

 

❓ What is a type error?

❓ What are the four questions we ask ourselves in the Debugging Framework?

 

What did I expect to happen?

 

What exactly is broken?

 

What happened instead?

 

What have I tried so far?

❓ What are three tools we could use to debug our programs?

 

  • Thinking like a computer
  • Test often
  • Stack Overflow / other resources
  • Talking it through (rubber ducking)
  • console.log()
  • Chrome debugger
  • ESLint

❓ What is a syntax error?

 

Normally a forgotten bracket / brace.

if (3 > Math.PI {
  console.log("wait what?");
}
SyntaxError: missing ) after condition

❓ What is a reference error?

 

Normally a typo when referring to a variable that doesn't exist.

var ward = "hello";
word.substring(1);
ReferenceError: "word" is not defined

❓ What is a type error?

 

Normally a typo when referring to a variable or function.

var submit = document.getElById("button");
TypeError: document.getElByID is not a function

Every developer spends a lot of their day debugging.

The best developers aren't the ones who don't debug, because they don't exist.

The best developers are the ones who are best at debugging.

My team at work fixes ~10-20 bugs per week.

 

So we have to get good at debugging!

How the web works

URL

Uniform Resource Locator

https://assets.slid.es/assets/deck-64ae628b82524.js
GET

Asks the server for a web page, resource, or piece of data.

POST

Used to send data to the server. A POST request has a body of data that we can send with the request.

Making requests

Headers

metadata about the request and the response

Status codes

Useful reference: https://httpstatuses.com/

❓ Was the request successful?

  • 200: Request was successful
  • 301: Request was redirected.
  • 401: Unauthorised request.
  • 404: Not found.
  • 500: Internal server error

Status codes

  • 1XX: Informational
  • 2XX: Successful request.
  • 3XX: Redirected request.
  • 4XX: Error on the client.
  • 5XX: Error on the server.

Useful reference: https://httpstatuses.com/

httpstatusdogs.com

httpstatusdogs.com

httpstatusdogs.com

content-type

Specifies the type of content in the request or response. Used to let the browser know what to do with some data once it gets it.

content-type

  • text/html: HTML. 
  • text/css: CSS.
  • image/jpeg: A JPEG image.
  • application/javascript: JavaScript code.
  • application/json: JSON data.

❓ What can HTTP headers contain?

 

❓ What is the purpose of status codes?

 

❓ What can an HTTP request contain?

API

API

Application Programming Interface

Twitter / Facebook / TFL / Google Maps / GitHub

Your fancy web application

API requests

The API provider can strictly control the abilities of the API, and what data it exposes to the consumers.

Private APIs: for employees only inside a company network

Semi-private: for clients who pay a fee to use the API

Public API: free to everyone on the web to use

The TFL API

https://api.tfl.gov.uk/

https://api.tfl.gov.uk/BikePoint

[
  {
    "$type": "Tfl.Api.Presentation.Entities.Place, Tfl.Api.Presentation.Entities",
    "id": "BikePoints_1",
    "url": "/Place/BikePoints_1",
    "commonName": "River Street , Clerkenwell",
    "placeType": "BikePoint",
    "additionalProperties": [
      {
        "$type": "Tfl.Api.Presentation.Entities.AdditionalProperties, Tfl.Api.Presentation.Entities",
        "category": "Description",
        "key": "TerminalName",
        "sourceSystemKey": "BikePoints",
        "value": "001023",
        "modified": "2020-09-04T09:56:45.65Z"
      },
      {
        "$type": "Tfl.Api.Presentation.Entities.AdditionalProperties, Tfl.Api.Presentation.Entities",
        "category": "Description",
        "key": "Installed",
        "sourceSystemKey": "BikePoints",
        "value": "true",
        "modified": "2020-09-04T09:56:45.65Z"
      },
      {
        "$type": "Tfl.Api.Presentation.Entities.AdditionalProperties, Tfl.Api.Presentation.Entities",
        "category": "Description",
        "key": "Locked",
        "sourceSystemKey": "BikePoints",
        "value": "false",
        "modified": "2020-09-04T09:56:45.65Z"
      },
      {
        "$type": "Tfl.Api.Presentation.Entities.AdditionalProperties, Tfl.Api.Presentation.Entities",
        "category": "Description",
        "key": "InstallDate",
        "sourceSystemKey": "BikePoints",
        "value": "1278947280000",
        "modified": "2020-09-04T09:56:45.65Z"
      },
      {
        "$type": "Tfl.Api.Presentation.Entities.AdditionalProperties, Tfl.Api.Presentation.Entities",
        "category": "Description",
        "key": "RemovalDate",
        "sourceSystemKey": "BikePoints",
        "value": "",
        "modified": "2020-09-04T09:56:45.65Z"
      },
     ]
      }

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

[
  {
    "$type": "Tfl.Api.Presentation.Entities.Place, Tfl.Api.Presentation.Entities",
    "id": "BikePoints_1",
    "url": "/Place/BikePoints_1",
    "commonName": "River Street , Clerkenwell",
    "placeType": "BikePoint",
    "additionalProperties": [
      
    ],
    "children": [
      
    ],
    "childrenUrls": [
      
    ],
    "lat": 51.529163,
    "lon": -0.10997
  },
  {
    "$type": "Tfl.Api.Presentation.Entities.Place, Tfl.Api.Presentation.Entities",
    "id": "BikePoints_26",
    "url": "/Place/BikePoints_26",
    "commonName": "Ampton Street , Clerkenwell",
    "placeType": "BikePoint",
    "additionalProperties": [
      
    ],
    "children": [
      
    ],
    "childrenUrls": [
      
    ],
    "lat": 51.52728,
    "lon": -0.118295
  },
  {
    "$type": "Tfl.Api.Presentation.Entities.Place, Tfl.Api.Presentation.Entities",
    "id": "BikePoints_72",
    "url": "/Place/BikePoints_72",
    "commonName": "Farringdon Lane, Clerkenwell",
    "placeType": "BikePoint",
    "additionalProperties": [
      
    ],
    "children": [
      
    ],
    "childrenUrls": [
      
    ],
    "lat": 51.52352,
    "lon": -0.10834
  },
  {
    "$type": "Tfl.Api.Presentation

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

Base URL of the API

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

(in URL terms this is called the "host")

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

Which part of the API we're interested in (bike stops)

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

(in URL terms this part is called the "path")

https://api.tfl.gov.uk/BikePoint?query=Clerkenwell

query parameters to filter the results

https://docs.github.com/en/rest

Find how many public repositories the user jackfranklin has on GitHub.

https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh

Top tip! JSONViewer Chrome extension

Using the GitHub API, find out how many stars the

 CodeYourFuture/syllabus repository has on GitHub.

❓ Which of the following statements about APIs is false?

 

- Public APIs can be accessed by anyone on the internet

- You must use JavaScript to access an API.

- APIs can control access to data or features of an application

- You can change data via an API

An API doesn't care about the programming language you use

Private API

Website

iOS App

Android App

Private API

Website

iOS App

Android App

all your backend developers work on this

and all these developers benefit and use the same API

Chrome backend

DevTools

The Chrome DevTools Protocol (CDP)

https://chromedevtools.github.io/devtools-protocol/tot/CSS/#method-getMatchedStylesForNode

How do you write code to talk to APIs?

 

Time for fetch!

Made with Slides.com