gikoha’s blog

個人的メモがわり

スマホからのAPI access

APIによるアクセス

  • 携帯からサーバにアクセスする場合当然ながらAPIを使ってアクセスする
    • 間違っても SQLをダイレクトに発行したりはしない
  • こうした場合サーバー側で API keyなどを使い制限した上で、

      return Ok(HttpResponse::Ok()
          .content_type("application/json")
          .json(&vec));
    

    などとしてJSONを返したりする

  • iPhone の場合、これを JSONdecoderで解析して、SwiftUIに落とし込むのはそれほど難しくない

      struct Result: Codable,Hashable {
          var text: String
      }
      @State private var results = [Result]()
      List(results, id: \.self) { item in
          HStack
          {
              Text(item.text)
                  .font(.headline)
                  .frame(width: 80, height: 40)
          }
      }
              ...
          guard var urlComponents = URLComponents(string: "https://api.ogehage.com/?apipass=PASSWORD")
    
          var request = URLRequest(url: urlComponents.url!)
    
          URLSession.shared.dataTask(with: request)
          { data, response, error in
              if let data = data
              {
                  let decoder = JSONDecoder()
                  guard let decodedResponse = try? decoder.decode([Result].self, from: data)
                  else
                  { // decode error
                      return
                  }
                  DispatchQueue.main.async
                  {
                      results = decodedResponse
                  }
              }
          }
      }
    
  • 一方androidでもhttpsアクセスは fuel などのライブラリを使えば簡単

    • fuel は letsencrypt ででっち上げたhttpsサイトだと、 java.security.cert.CertPathValidatorException が止まってしまう
      • letsencrypt 以外での認証サイトなら問題ない
    • okhttp3なら証明書をダウンロードして追加できるので問題ない模様